실행환경
- cpu : 인텔계열(64bit)
- 컴파일러 : nasm
- 리눅스 : ubuntu 16.04 LTS
설치방법
- sudo apt-get install nasm
컴파일
- nasm -f elf64 파일명.asm -o 파일명.o --> 목적파일을 만든다.
- ld 파일명.o -o 파일명 --> 실행파일을 만든다.
문제 : 3! 구해보기 , 4!이상은 결과값이 10이상이므로 따로 처리를 해줘야 된다.
reclusive.asm
section .bss
onum resb 2
result resb 5
section .data
inum db "Input num : "
len equ $ -inum
end db 0x0a
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:
write inum,len
read onum,2
mov bx,[onum]
sub bx,'0'
call factorial
add ax,'0'
mov [result],ax
write result,1
write end,1
mov eax,1
int 0x80
factorial:
;넘어온 값을 가지고 비교를 한다.
;만약 1보다 크다라면 곱해준다.
cmp bl,1 ;1보다 크다면 (bx가 bl을 포함한다.)
jg cal
mov al,1
jmp exit
cal:
dec bl
call factorial
inc bl
mul bl ; ax = al*bl
exit:
ret
'Programming Language > Assembly' 카테고리의 다른 글
[Assembly] 매크로를 이용한 구구단 출력 (0) | 2016.12.04 |
---|---|
[Assembly] 구구단 출력 (0) | 2016.12.04 |
[Assembly] 최대값 구하기 (0) | 2016.12.04 |
[Assembly] 매크로 사용해보기 (0) | 2016.12.04 |
[Assembly] 숫자 곱하기 (0) | 2016.12.04 |