본문 바로가기

Programming Language/Assembly

[Assembly] 어셈블리 Test2

실행환경

- cpu : 인텔계열(64bit)

- 컴파일러 : nasm

- 리눅스 : ubuntu 16.04 LTS


설치방법

sudo apt-get install nasm


컴파일

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

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


문제 : 세 개의 값을 입력한 후 합계와 몫과 나머지 몫을 출력하시오.


test2.asm

section .data

first db "frist : "

len1 equ $ -first

second db "second : "

len2 equ $ -second

third db "third : "

len3 equ $ -third

newLine db 0x0a

total db "total : "

len4 equ $ -total


section .bss

num1 resb 1

num2 resb 1

num3 resb 1

temp resb 1

share resb 1

rem resb 1

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

call _input

call _add

call _div

call _exit



_add:

mov al,[num1]

sub al,'0'

mov bl,[num2]

sub bl,'0'

mov cl,[num3]

sub cl,'0'



add al,bl

add al,cl

mov [sum],al

mov bl,10

div bl


add al,'0'

add ah,'0'



mov [share],al

mov [rem],ah


cmp al,'0'

je _one


write share,1

write rem,1

write newLine,1



ret



_one :

write rem,1

write newLine,1

ret



_input:

write first,len1

read num1,1

read temp,1

write second,len2

read num2,1

read temp,1

write third,len3

read num3,1

read temp,1

ret



_div:

mov al,[sum]

mov bl,3

div bl



add al,'0'

add ah,'0'



mov [share],al

mov [rem],ah



write share,1

write newLine,1

write rem,1

write newLine,1

ret



_exit:

mov eax,1

int 0x80







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

[Assembly] 어셈블리 Test4  (0) 2016.12.04
[Assembly] 어셈블리 Test3  (0) 2016.12.04
[Assembly] 어셈블리 Test1  (0) 2016.12.04
[Assembly] 매크로를 이용한 구구단 출력  (0) 2016.12.04
[Assembly] 구구단 출력  (0) 2016.12.04