본문 바로가기

Programming Language/Assembly

[Assembly] 어셈블리 문제8

실행환경

- cpu : 인텔계열(64bit)

- 컴파일러 : nasm

- 리눅스 : ubuntu 16.04 LTS


설치방법

sudo apt-get install nasm


컴파일

- nasm -f elf64 파일명.asm -o 파일명.o  --> 목적파일을 만든다.

- ld 파일명.o -o 파일명  --> 실행파일을 만든다.


문제8 : n을 입력받아 1부터 n까지의 합과 짝수의 합 홀수의 합 평균을 출력하시오. 


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