본문 바로가기

Programming Language/Assembly

[Assembly] 어셈블리 Test18

실행환경

- cpu : 인텔계열(64bit)

- 컴파일러 : nasm

- 리눅스 : ubuntu 16.04 LTS


설치방법

sudo apt-get install nasm


컴파일

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

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


문제 : 사용자가 입력하는 정수를 계속 더한다.

       만약 0을 입력하면 입력된 합의 결과 및 평균를 출력하고 프로그램 종료

       정수 입력 : 1

       정수 입력 : 3

       정수 입력 : 0

       합계 = 4

       평균 = 2    


test18.asm

section .data


inp db '정수 입력 : '


li equ $ -inp




s db '합계 = '


ls equ $ -s




a db '평균 = '


la equ $ -a




ent db 0x0A




section .bss


num1 resb 1


num2 resb 1


sum resb 2


avr 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:


mov al,'0'


mov [sum],al


mov rcx,0




_lp:


inc rcx


push rcx


write inp,li


read num1,1


read t,1


mov bl,[num1]


sub bl,'0'


mov al,[sum]


sub al,'0'




cmp bl,0


je _print




add al,bl




add al,'0'


mov [sum],al




pop rcx


jmp _lp




_print:


pop rcx


dec cl


div cl




add al,'0'


mov [avr],al




write s,ls


write sum,2


write ent,1


write a,la


write avr,2


write ent,1




_exit:


mov eax,1


int 0x80


'Programming Language > Assembly' 카테고리의 다른 글

[Assembly] 어셈블리 Test20  (0) 2016.12.05
[Assembly] 어셈블리 Test19  (0) 2016.12.05
[Assembly] 어셈블리 Test17  (0) 2016.12.05
[Assembly] 어셈블리 Test16  (0) 2016.12.05
[Assembly] 어셈블리 Test15  (0) 2016.12.05