실행환경
- cpu : 인텔계열(64bit)
- 컴파일러 : nasm
- 리눅스 : ubuntu 16.04 LTS
설치방법
- sudo apt-get install nasm
컴파일
- nasm -f elf64 파일명.asm -o 파일명.o --> 목적파일을 만든다.
- ld 파일명.o -o 파일명 --> 실행파일을 만든다.
row_loop_macro.asm
section .data
end db 0x0A
star db '*'
len1 equ $ -star
equl db '='
len2 equ $ -equl
space db 0x09
len3 equ $ -space
section .bss
num1 resb 1
num2 resb 1
res resb 1
section .text
global _start
%macro write 2
mov eax, 4
mov ebx, 1
mov ecx, %1
mov edx, %2
int 0x80
ret
%endmacro
_start:
mov rcx, 9 ;3번 반복하겠다, 반복 횟수
mov rax, '1' ;반복할 값, 데이터
L1:
mov [num1], rax ;내 데이터가 날아가지 않게 저장하는 부분이다
push rcx ;반복횟수 정보가 날아가지 않게 저장하는 부분이다
mov rcx, 9
mov rbx, '1'
L2:
push rcx
mov [num2], rbx
call num2_print
call star_print
call num1_print
call equl_print
call res_print
call spaceprint
mov rbx, [num2]
inc rbx
pop rcx
loop L2
call endprint
mov rax, [num1]
inc rax
pop rcx
loop L1
mov rax, 1
int 0x80
num1_print:
write num1, 1
num2_print:
write num2, 1
star_print:
write star, len1
equl_print:
write equl, len2
res_print:
mov al, [num2]
sub al, '0'
mov bl, [num1]
sub bl, '0'
mul bl
mov bl, 10
div bl
add al, '0'
add ah, '0'
cmp al, '0'
je _mov
mov [res], al
mov [res+1], ah
write res, 2
_mov:
mov [res], ah
write res, 2
spaceprint:
write space, len3
endprint:
write end, 1
'Programming Language > Assembly' 카테고리의 다른 글
[Assembly] 어셈블리 Test2 (0) | 2016.12.04 |
---|---|
[Assembly] 어셈블리 Test1 (0) | 2016.12.04 |
[Assembly] 구구단 출력 (0) | 2016.12.04 |
[Assembly] 재귀함수 구현 (0) | 2016.12.04 |
[Assembly] 최대값 구하기 (0) | 2016.12.04 |