본문 바로가기

Programming Language/Assembly

[Assembly] 어셈블리 문제4

실행환경

- cpu : 인텔계열(64bit)

- 컴파일러 : nasm

- 리눅스 : ubuntu 16.04 LTS


설치방법

sudo apt-get install nasm


컴파일

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

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


4. 구구단을 만들어라

1*1=1  2*1=2  3*1=3  4*1=4   5*1=5

1*2=2  2*2=4  3*2=6  4*2=8   5*2=10

1*3=3  2*3=5  3*3=9  4*3=12  5*3=15

//등등

6*1=6   7*1=7   8*1=8   9*1=9  

6*2=12  7*2=14  8*2=16  9*2=18 

6*3=18  7*3=21  8*3=24  9*3=27


exam4.asm

section .data


x db 'x'


e db '='


ent db 0x0A


space db ' '




section .bss


n1 resb 1


n2 resb 1


re resb 2


buf resb 1


buf2 resb 1




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:


mov rcx,9


mov rdx,2


push rdx




_fir:


mov bl,'1'


mov al,'1'


mov [buf],al


mov al,5


mov [buf2],al


jmp _lp




_sec:


mov rcx,9


mov bl,'1'


mov al,'6'


mov [buf],al


mov al,4


mov [buf2],al



_lp:


mov al,[buf]


push rcx


mov rcx,[buf2]




_lp2:


push rcx


mov [n1],al


mov [n2],bl


sub al,'0'


sub bl,'0'




mul bl




call _div


call _print




mov al,[n1]


mov bl,[n2]




inc al




pop rcx


loop _lp2




write ent,1


mov al,[n1]


mov bl,[n2]


inc bl


pop rcx


loop _lp




pop rdx


dec rdx




cmp rdx,0


je _exit




jmp _sec




_div:


mov bl,10


div bl




add al,'0'


add ah,'0'


mov [re],al


mov [re+1],ah


ret




_print:


write n1,1


write x,1


write n2,1


write e,1


write re,2


write space,1


ret




_exit:


mov eax,1


int 0x80


'Programming Language > Assembly' 카테고리의 다른 글

[Assembly] 어셈블리 문제6  (0) 2016.12.05
[Assembly] 어셈블리 문제5  (0) 2016.12.05
[Assembly] 어셈블리 문제3  (0) 2016.12.05
[Assembly] 어셈블리 문제2  (0) 2016.12.05
[Assembly] 어셈블리 문제1  (0) 2016.12.05