본문 바로가기

Programming Language/Assembly

[Assembly] 어셈블리 Test21

실행환경

- cpu : 인텔계열(64bit)

- 컴파일러 : nasm

- 리눅스 : ubuntu 16.04 LTS


설치방법

sudo apt-get install nasm


컴파일

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

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


문제 : 5개의 정수를 입력한 후 이들 중 최대값과 최소값, 

        합과 평균을 출력


test21.asm

section .data


inp db '정수 입력 : '


li equ $ -inp




ma db '최대 = '


lma equ $ -ma




mi db '최소 = '


lmi equ $ -mi




s db '합계 = '


ls equ $ -s




a db '평균 = '


la equ $ -a




ent db 0x0A




section .bss


n1 resb 1


n2 resb 1


n3 resb 1


n4 resb 1


n5 resb 1


sum resb 2


max resb 2


min resb 2


avr resb 2


t resb 1


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 inp,li


read n1,1


read t,1


write inp,li


read n2,1


read t,1


write inp,li


read n3,1


read t,1


write inp,li


read n4,1


read t,1


write inp,li


read n5,1


read t,1


_max:


mov al,[n1]


cmp al,[n2]


jg _max2


mov al,[n2]




_max2:


cmp al,[n3]


jg _max3


mov al,[n3]




_max3:


cmp al,[n4]


jg _max4


mov al,[n4]




_max4:


cmp al,[n5]


jg _max5


mov al,[n5]




_max5:


mov [max],al




_min:


mov al,[n1]


cmp al,[n2]


jl _min2


mov al,[n2]




_min2:


cmp al,[n3]


jl _min3


mov al,[n3]




_min3:


cmp al,[n4]


jl _min4


mov al,[n4]




_min4:


cmp al,[n5]


jl _min5


mov al,[n5]




_min5:


mov [min],al




_sum:


mov al,[n1]


sub al,'0'


mov bl,[n2]


sub bl,'0'


add al,bl


mov bl,[n3]


sub bl,'0'


add al,bl


mov bl,[n4]


sub bl,'0'


add al,bl


mov bl,[n5]


sub bl,'0'


add al,bl




mov [avr],al


mov bl,10


div bl




add al,'0'


add ah,'0'


mov [sum],al


mov [sum+1],ah




_avr:


mov ah,0


mov al,[avr]




mov bl,5


div bl




add al,'0'


mov [avr],al






_print:


write ma,lma


write max,2




write ent,1




write mi,lmi


write min,2




write ent,1




write s,ls


write sum,2




write ent,1




write a,la


write avr,2




write ent,1




_exit:


mov eax,1


int 0x80


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

[Assembly] 어셈블리 문제2  (0) 2016.12.05
[Assembly] 어셈블리 문제1  (0) 2016.12.05
[Assembly] 어셈블리 Test20  (0) 2016.12.05
[Assembly] 어셈블리 Test19  (0) 2016.12.05
[Assembly] 어셈블리 Test18  (0) 2016.12.05