본문 바로가기

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 파일명  --> 실행파일을 만든다.



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