실행환경
- cpu : 인텔계열(64bit)
- 컴파일러 : nasm
- 리눅스 : ubuntu 16.04 LTS
설치방법
- sudo apt-get install nasm
컴파일
- nasm -f elf64 파일명.asm -o 파일명.o --> 목적파일을 만든다.
- ld 파일명.o -o 파일명 --> 실행파일을 만든다.
문제5 : 4개의 값을 입력받고 최대값 최소값을 test파일을 생성한뒤 저장하고 화면에 읽어 출력하시오.
exam5.asm
section .data
ma db 'max : '
lma equ $ -ma
mi db 'min : '
lmi equ $ -mi
fname db 'test',0
lf equ $ -fname
space db ' '
ent db 0x0A
section .bss
n1 resb 1
n2 resb 1
n3 resb 1
n4 resb 1
t resb 1
max resb 1
min resb 1
fd resb 1
buf resb 20
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:
mov eax,8
mov ebx,fname
mov ecx,777o
mov edx,lf
int 0x80
mov [fd],eax
read n1,1
read t,1
read n2,1
read t,1
read n3,1
read t,1
read n4,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:
mov [max],al
mov eax,4
mov ebx,[fd]
mov ecx,ma
mov edx,lma
int 0x80
mov eax,4
mov ebx,[fd]
mov ecx,max
mov edx,1
int 0x80
_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:
mov [min],al
mov eax,4
mov ebx,[fd]
mov ecx,ent
mov edx,1
int 0x80
mov eax,4
mov ebx,[fd]
mov ecx,mi
mov edx,lmi
int 0x80
mov eax,4
mov ebx,[fd]
mov ecx,min
mov edx,1
int 0x80
_file:
mov eax,5
mov ebx,fname
mov ecx,0x00
mov edx,700o
int 0x80
mov [fd],eax
mov eax,3
mov ebx,[fd]
mov ecx,buf
mov edx,20
int 0x80
write ent,1
write buf,20
write ent,1
_exit:
mov eax,1
int 0x80
'Programming Language > Assembly' 카테고리의 다른 글
[Assembly] 어셈블리 문제7 (0) | 2016.12.05 |
---|---|
[Assembly] 어셈블리 문제6 (0) | 2016.12.05 |
[Assembly] 어셈블리 문제4 (0) | 2016.12.05 |
[Assembly] 어셈블리 문제3 (0) | 2016.12.05 |
[Assembly] 어셈블리 문제2 (0) | 2016.12.05 |