리그캣의 개발놀이터

어셈블리 - 계산기 본문

프로그래밍 언어/Assembly

어셈블리 - 계산기

리그캣 2018. 1. 22. 15:29

계산기 코드


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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
TITLE Calculator
INCLUDE Irvine32.inc
.data
    str1 BYTE "두개의 숫자를 입력하시오:",0
    str2 BYTE "1.덧셈",0Dh,0Ah,
        "2.뺄셈",0Dh,0Ah,
        "3.곱셈",0Dh,0Ah,
        "4.나눗셈",0Dh,0Ah,0
    str3 BYTE "선택: ",0
    str4 BYTE "결과: ",0
    num1 DWORD ?    ;정수1
    num2 DWORD ?    ;정수2
    cnt DWORD 0
.code
main PROC
 
    mov edx, OFFSET str1
    call WriteString
    call Crlf
    
    call ReadInt ;num1    ;num1, num2받음
    mov eax, num1
    call ReadInt ;num2
    mov eax, num2
 
    mov edx, OFFSET str2    ;menu출력
    call WriteString
    call Crlf
    mov edx, OFFSET str3
    call WriteString
    call Crlf
 
    call ReadInt        ;선택번호 받음
    call Crlf
    mov edx,OFFSET str4
    call WriteString
 
    cmp eax,1
    je Menu1
    cmp eax,2
    je Menu2
    cmp eax,3
    je Menu3
    cmp eax,4
    je Menu4
    jmp DONE            ;아무것도 선택하지 않음.
 
    Menu1:call Addnum
    jmp DONE
    Menu2:call Subnum
    jmp DONE
    Menu3:call Multiplication
    jmp DONE
    Menu4:call Division
    jmp DONE
 
DONE:
 
exit
main ENDP
 
Addnum PROC
    mov eax,num1
    add eax,num2
    
    call WriteDec
    call Crlf
 
    ret
Addnum ENDP        ;더하기 함수 종료
 
Subnum PROC
    mov eax,num1
    sub eax,num2
    
    call WriteDec
    call Crlf
 
Subnum ENDP
 
Multiplication PROC
    mov ecx,num2
    mov eax,0
L1:
    add eax,num1
loop L1
    call WriteDec
    call Crlf
Multiplication ENDP
 
Division PROC
    mov eax,num1
    mov ebx,0
    mov ecx,num1
L1:
    inc cnt
    mov eax,num1
    add ebx,num2
    cmp eax,ebx
    je DONE2    ;eax=ebx이면 몫은 카운트횟수
    jb DONE3    ;eax<ebx이면 몫은 카운트 횟수 -1
loop L1
 
DONE3:
    dec cnt
    
DONE2:
    mov eax,cnt
    call WriteDec
    call Crlf
ret
Division ENDP
 
END main
 
cs


Comments