실행환경
- cpu : 인텔계열(64bit)
- 컴파일러 : nasm
- 리눅스 : ubuntu 16.04 LTS
설치방법
- sudo apt-get install nasm
컴파일
- nasm -f elf64 파일명.asm -o 파일명.o --> 목적파일을 만든다.
- ld 파일명.o -o 파일명 --> 실행파일을 만든다.
exam8.asm
section .data
su db 'sum ='
lsu equ $-su
ev db 'even ='
lev equ $-ev
od db 'odd ='
lod equ $-od
av db 'avr ='
lav equ $-av
star db '*'
ent db 0x0A
section .bss
nu resb 1
nu2 resb 1
t resb 1
sum resb 2
esum resb 2
osum resb 2
avr 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,'0'
mov [sum],al
mov [esum],al
mov [osum],al
mov [avr],al
read nu,1
read t,1
mov al,[nu]
mov [nu2],al
_lp:
mov al,[nu]
sub al,'0'
mov bl,2
div bl
cmp ah,0
je _even
_odd:
mov al,[nu]
sub al,'0'
mov bl,[osum]
sub bl,'0'
add al,bl
add al,'0'
mov [osum],al
jmp _sum
_even:
mov al,[nu]
sub al,'0'
mov bl,[esum]
sub bl,'0'
add al,bl
add al,'0'
mov [esum],al
_sum:
mov al,[nu]
sub al,'0'
mov bl,[sum]
sub bl,'0'
add al,bl
add al,'0'
mov [sum],al
mov al,[nu]
sub al,'0'
dec al
cmp al,0
je _avr
add al,'0'
mov [nu],al
jmp _lp
_avr:
mov ah,0
mov al,[sum]
sub al,'0'
mov bl,[nu2]
sub bl,'0'
div bl
add al,'0'
mov [avr],al
_print:
write su,lsu
write sum,2
write ent,1
write ev,lev
write esum,2
write ent,1
write od,lod
write osum,2
write ent,1
write av,lav
write avr,1
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] 어셈블리 문제5 (0) | 2016.12.05 |
[Assembly] 어셈블리 문제4 (0) | 2016.12.05 |
[Assembly] 어셈블리 문제3 (0) | 2016.12.05 |