실행환경
- 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
'Programming Language > Assembly' 카테고리의 다른 글
[Assembly] 사칙연산 프로그램 (0) | 2016.12.04 |
---|---|
[Assembly] 배열선언 및 숫자더하기 (0) | 2016.12.04 |
[Assembly] 짝수 홀수 판별2 (0) | 2016.12.04 |
[Assembly] 짝수 홀수 판별1 (0) | 2016.12.04 |
[Assembly] 문자열 변환 (0) | 2016.12.04 |