실행환경
- cpu : 인텔계열(64bit)
- 컴파일러 : nasm
- 리눅스 : ubuntu 16.04 LTS
설치방법
- sudo apt-get install nasm
컴파일
- nasm -f elf64 파일명.asm -o 파일명.o --> 목적파일을 만든다.
- ld 파일명.o -o 파일명 --> 실행파일을 만든다.
문제 : 출력예에 맞는 4칙연산을 완성
ex)
My Calculator
1. 더하기
2. 빼기
3. 곱하기
4. 나누기
선택하세요 1
첫번째 수 : 5
두번째 수 : 7
두 수의 합 = 12
test11.asm
section .data
msg db 'My Calculator',0x0A
lmsg equ $ -msg
a db '1. 더하기',0x0A
la equ $ -a
s db '2. 빼기',0x0A
ls equ $ -s
m db '3. 곱하기',0x0A
lm equ $ -m
d db '4. 나누기',0x0A
ld equ $ -d
sel db '선택하세요 '
lsel equ $ -sel
fir db '첫번째 수 : '
lfir equ $ -fir
sec db '두번째 수 : '
lsec equ $ -sec
sum db '두 수의 합 = '
lsum equ $ -sum
min db '두 수의 차 = '
lmin equ $ -min
gob db '두 수의 곱 = '
lgob equ $ -gob
na db '두 수의 나눔 = '
lna equ $ -na
ent db 0x0A
section .bss
sw resb 2
n1 resb 1
n2 resb 1
res 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 msg,lmsg
write a,la
write s,ls
write m,lm
write d,ld
write sel,lsel
read sw,2
write ent,1
write fir,lfir
read n1,1
read t,1
write sec,lsec
read n2,1
read t,1
mov al,[n1]
sub al,'0'
mov bl,[n2]
sub bl,'0'
mov cl,[sw]
cmp cl,'1'
je _add
cmp cl,'2'
je _sub
cmp cl,'3'
je _mul
cmp cl,'4'
je _div
jmp _start
_add:
add al,bl
call _print
write sum,lsum
write res,2
jmp _exit
_sub:
sub al,bl
call _print
write min,lmin
write res,2
jmp _exit
_mul:
mul bl
call _print
write gob,lgob
write res,2
jmp _exit
_div:
div bl
mov bl,10
mul bl
call _print
write na,lna
write res,2
jmp _exit
_print:
mov bl,10
div bl
add al,'0'
add ah,'0'
mov [res],al
mov [res+1],ah
ret
_exit:
write ent,1
mov eax,1
int 0x80
'Programming Language > Assembly' 카테고리의 다른 글
[Assembly] 어셈블리 Test13 (0) | 2016.12.05 |
---|---|
[Assembly] 어셈블리 Test12 (0) | 2016.12.05 |
[Assembly] 어셈블리 Test10 (0) | 2016.12.05 |
[Assembly] 어셈블리 Test9 (0) | 2016.12.05 |
[Assembly] 파일입출력 (0) | 2016.12.05 |