실행환경
- cpu : 인텔계열(64bit)
- 컴파일러 : nasm
- 리눅스 : ubuntu 16.04 LTS
설치방법
- sudo apt-get install nasm
컴파일
- nasm -f elf64 파일명.asm -o 파일명.o --> 목적파일을 만든다.
- ld 파일명.o -o 파일명 --> 실행파일을 만든다.
문제 : 1부터 100까지의 수 중 짝수의 합과 홀수의 합, 그리고 3의 배수의 합
test19.asm
section .data
e db 'even sum : '
le equ $ -e
o db 'odd sum : '
lo equ $ -o
t db '3 sum : '
lt equ $ -t
ent db 0x0A
section .bss
esum resb 4
osum resb 4
tsum resb 4
tmp 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:
mov al,1
mov bl,0
mov [esum],bl
mov [osum],bl
mov [tsum],bl
_lp:
cmp al,31
je _print
mov [tmp],al
mov bl,2
div bl
cmp ah,1
je _odd
_even:
mov al,[tmp]
mov bl,[esum]
add al,bl
mov [esum],al
mov ah,0
jmp _three
_odd:
mov al,[tmp]
mov bl,[osum]
add al,bl
mov [osum],al
mov ah,0
jmp _three
_three:
mov al,[tmp]
mov bl,3
div bl
mov cl,ah
push rcx
mov eax,1
pop rcx
cmp cl,0
je _tok
jmp _ntok
_tok:
mov al,[tmp]
mov bl,[tsum]
add al,bl
mov [tsum],al
_ntok:
mov al,[tmp]
inc al
jmp _lp
_print:
add al,0
mov bl,100
mov al,[esum]
div bl
add al,'0'
mov [esum],al
mov al,ah
mov ah,0
mov bl,10
div bl
add al,'0'
add ah,'0'
mov [esum+1],al
mov [esum+2],ah
mov ah,0
mov bl,100
mov al,[osum]
div bl
add al,'0'
mov [osum],al
mov al,ah
mov ah,0
mov bl,10
div bl
add al,'0'
add ah,'0'
mov [osum+1],al
mov [osum+2],ah
mov ah,0
mov bl,100
mov al,[tsum]
div bl
add al,'0'
mov [tsum],al
mov al,ah
mov ah,0
mov bl,10
div bl
add al,'0'
add ah,'0'
mov [tsum+1],al
mov [tsum+2],ah
write e,le
write esum,3
write ent,1
write o,lo
write osum,3
write ent,1
write t,lt
write tsum,3
write ent,1
_exit:
mov eax,1
int 0x80
'Programming Language > Assembly' 카테고리의 다른 글
[Assembly] 어셈블리 Test21 (0) | 2016.12.05 |
---|---|
[Assembly] 어셈블리 Test20 (0) | 2016.12.05 |
[Assembly] 어셈블리 Test18 (0) | 2016.12.05 |
[Assembly] 어셈블리 Test17 (0) | 2016.12.05 |
[Assembly] 어셈블리 Test16 (0) | 2016.12.05 |