본문 바로가기

Programming Language/Assembly

[Assembly] 숫자 더하기

실행환경

- cpu : 인텔계열(64bit)

- 컴파일러 : nasm

- 리눅스 : ubuntu 16.04 LTS


설치방법

sudo apt-get install nasm


컴파일

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

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


addDouble.asm

section .data

first db 'first : '

len1 equ $ -first

second db 'second : '

len2 equ $ -second

third db 'third : '

len3 equ $ -third

end db 0x0a

section .bss

num1 resb  5 ;초기화 되지 않은 bss영역에서 5byte만큼 공간을 할당하겠다라는 의미

num2 resb  5

num3 resb 5

result resb 5


section .text

global _start


_start:

;first 출력

mov eax,4

mov ebx,1

mov ecx,first

mov edx,len1

int 0x80


;first 입력

mov eax,3

mov ebx,1

mov ecx,num1

mov edx,len1

int 0x80

;second 출력

mov eax,4

mov ebx,1

mov ecx,second

mov edx,len2

int 0x80


;second 입력

mov eax,3

mov ebx,1

mov ecx,num2

mov edx,len2

int 0x80


;third 출력

mov eax,4

mov ebx,1

mov ecx,third

mov edx,len3

int 0x80


;third 입력

mov eax,3

mov ebx,1

mov ecx,num3

mov edx,len3

int 0x80


;입력받은 값들을 이젠 더한다.

mov eax, [num1]

sub eax,'00' ;입력된 숫자는 문자열이기 때문에 '0'으로 빼주면 숫자가 된다.

mov ebx, [num2]

sub ebx,'00'

mov ecx, [num3]

sub ecx,'00'


add eax,ebx ; eax = eax + ebx

add eax,ecx

add eax,'00'


mov [result],eax


call _print


mov eax,4

mov ebx,1

mov ecx,end

mov edx,1

int 0x80


mov eax,1

int 0x80


_print:

mov eax,4

mov ebx,1

mov ecx,result

mov edx,2

int 0x80

ret