티스토리 뷰

Assembly Language

어셈블리어 구구단 구현

감자형 2017. 10. 26. 23:22

INCLUDE Irvine32.inc

.data

SystemPrompt1 BYTE "Enter the number you want!",0 ; 입력 받기위한 출력하기 위한 변수 선언

SystemPrompt2 BYTE " * ",0 ; BYTE타입의 *의 형태로 출력하기 위함  example) 2 * 4 = Value

SystemPrompt3 BYTE " = ",0 ; BYTE 타입의 =의 형태로 출력하기 위함

val1 DWORD 2 ; DWORD 타입의 var1 변수 value = 2 init

val2 DWORD 1 ; DWROD 타입의 var2 변수 value = 1 init

num DWORD 0 ; DWORD 타입의 num 변수 value = non init



.code

main PROC

;prompt 입력

mov edx, OFFSET SystemPrompt1 ; offset으로 prompt1의 주소를 가져와서 edx에 넣는다. edx: 입출력에서 동작한다.

call WriteString ; string을 출력하는 과정 ( edx에 있는 String 값을 가져와서 출력시키기위함)

call Crlf ; 줄 바꿈

call ReadInt ; int 입력을 받는 과정

mov num, eax ; int 길이를 받는 과정 입력받은값을 eax -> num으로 넣는다.

call Crlf ; 줄 바꿈


;구구단 출력

dec num ; dec를 해주지않으면 -1만큼 단수가 출력이 되지 않으며, num값이 5로 입력되었을경우 6단까지나오게 된다. 그이유는 1단을 무시해 버리게하려는것 때문에

mov ecx, num ; L1 카운터 변수 loop Number    num값을 -> eax에 다시 넣는다. Loop전에 num값을 넣으면 loop횟수를 나타낸다. LOOPA의 루프를 나타낸다.



; 첫번째 LOOP

LoopA:

mov val2, 1 ; var2 변수 초기값 1

mov num, ecx ; 카운터 변수 입력값 num까지 반복

mov ecx, 9 ;  L2 카운터 변수 loop 횟수


LoopB:

mov eax, val1 ; val1 의 값 eax의 스택에 넣는다. eax에 있는 값ㅇ늘 WriteDec 으로 호출해서 출력한다.

call WriteDec ;val1


mov edx, OFFSET SystemPrompt2 ; offset로 prompt의 저장된 값을 edx에 넣느다. 그리고 edx에 있는값을 writeString의 호출로 출력한다.

call WriteString ; * 출력하기 위한 호출


mov eax, val2 ; var2의 값을 eax에 넣고 WriteDec으로 출력을 한다.

call WriteDec ; 1~9 값 호출


mov edx, OFFSET SystemPrompt3 ; promtp3 에 있는 = 을 호출해서 출력시키기 위함.

call WriteString ; = 출력


mov eax, val1 ; eax에 va1의 값과

imul val2 ; val2의 값을 곱하여 음수를 포함한 수를 곱할 때 필요한 imul 사용


call WriteDec ; 결과값 출력 : result eax에 있는 값을 출력해준다.

call Crlf ; 줄바꿈


inc val2 ; val2의 값을 증가시킨다. Ex) 2*1,2*2,2*3 ~ 2*9


loop LoopB ; L2 루프 종료


call Crlf ; 줄바꿈하기

inc val1 ; val1 변수 증가

mov ecx, num ; num에 있는 값을 cnt해서 ecx에 값을 넣는다.


loop LoopA ; L1 루프 종료

exit

main ENDP

END main



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

어셈블리어 중간고사 정리 2  (0) 2017.10.26
어셈블리어 중간고사 정리  (0) 2017.10.14
[Assembly] 수업 정리 1  (0) 2017.10.08
[Assembly] 어셈블리어의 기초  (0) 2017.10.02
어셈블리어 수업 정리 1  (0) 2017.09.17
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함