실행환경
- 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 |