본문 바로가기

Programming Language/Assembly

[Assembly] 어셈블리 Test12

실행환경

- cpu : 인텔계열(64bit)

- 컴파일러 : nasm

- 리눅스 : ubuntu 16.04 LTS


설치방법

sudo apt-get install nasm


컴파일

- nasm -f elf64 파일명.asm -o 파일명.o  --> 목적파일을 만든다.

- ld 파일명.o -o 파일명  --> 실행파일을 만든다.



문제 : 3개의 수를 입력한 후 최대값 최소값을 출력


test12.asm

section .data


n1 db 'num1 :'


ln1 equ $ -n1


n2 db 'num2 :'


ln2 equ $ -n2


n3 db 'num3 :'


ln3 equ $ -n3




ma db 'max :'


lma equ $ -ma


mi db 'min :'


lmi equ $ -mi




ent db 0x0A




section .bss


nu1 resb 2


nu2 resb 2


nu3 resb 2


max resb 2


min resb 2




section .text


global _start




%macro write 2


mov eax,4


mov ebx,1


mov ecx,%1


mov edx,%2


int 0x80


%endmacro




%macro read 2


mov eax,3


mov ebx,1


mov ecx,%1


mov edx,%2


int 0x80


%endmacro




_start:


write n1,ln1


read nu1,2




write n2,ln2


read nu2,2




write n3,ln3


read nu3,2




mov al,[nu1]


mov bl,[nu2]


mov cl,[nu3]




cmp al,bl


jg _al




_bl:


cmp bl,cl


jg _bmax




mov [max],cl


jmp _min




_al:


cmp al,cl


jg _amax




mov [max],cl


jmp _min


 


_bmax:


mov [max],bl


jmp _min




_amax:


mov [max],al


jmp _min




_min:


cmp al,bl


jl _al2




_bl2:


cmp bl,cl


jl _bmin




mov [min],cl


jmp _print




_al2:


cmp al,cl


jl _amin



mov [min],cl


jmp _print




_amin:


mov [min],al


jmp _print




_bmin:


mov [min],bl


jmp _print




_print:


write ent,1


write ma,lma


write max,1


write ent,1


write mi,lmi


write min,1


write ent,1




_exit:


mov eax,1


int 0x80



'Programming Language > Assembly' 카테고리의 다른 글

[Assembly] 어셈블리 Test14  (0) 2016.12.05
[Assembly] 어셈블리 Test13  (0) 2016.12.05
[Assembly] 어셈블리 Test11  (0) 2016.12.05
[Assembly] 어셈블리 Test10  (0) 2016.12.05
[Assembly] 어셈블리 Test9  (0) 2016.12.05