-
Notifications
You must be signed in to change notification settings - Fork 0
/
lab3.Asm
84 lines (78 loc) · 2.1 KB
/
lab3.Asm
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
; Template for console application
.586
.MODEL flat, stdcall
OPTION CASEMAP:NONE
Include kernel32.inc
Include masm32.inc
IncludeLib kernel32.lib
IncludeLib masm32.lib
.CONST
MsgExit DB 13,10,"Press Enter to Exit",0AH,0DH,0
MsgError DB 13,10,"Division by zero",0AH,0DH,0
.DATA
N SWORD ?
fN SWORD 0
Zapros1 DB 13,10,'Input A',13,10,0
Zapros2 DB 13,10,'Input X',13,10,0
Zapros3 DB 13,10,'Input Y',13,10,0
Result DB 'Result='
ResStr DB 16 DUP (' '),0
.DATA?
X SWORD ?
fX SWORD ?
A SWORD ?
fA SWORD ?
Y SWORD ?
fY SWORD ?
Buffer DB 10 DUP(?)
inbuf DB 100 DUP (?)
.CODE
Start:
;
; Add you statements
;
Invoke StdOut,ADDR Zapros1
Invoke StdIn,ADDR Buffer,LengthOf Buffer
Invoke StripLF,ADDR Buffer
Invoke atol,ADDR Buffer ;ðåçóëüòàò â EAX
mov DWORD PTR A,EAX
Invoke StdOut,ADDR Zapros3
Invoke StdIn,ADDR Buffer,LengthOf Buffer
Invoke StripLF,ADDR Buffer
Invoke atol,ADDR Buffer ;ðåçóëüòàò â EAX
mov DWORD PTR Y,EAX
Invoke StdOut,ADDR Zapros2
Invoke StdIn,ADDR Buffer,LengthOf Buffer
Invoke StripLF,ADDR Buffer
Invoke atol,ADDR Buffer ;ðåçóëüòàò â EAX
mov DWORD PTR X,EAX
mov AX,A
cmp AX,Y
jl less
mov AX,A
imul X
imul X
jmp continue
less:
mov DX,1
mov AX,A
mov BX,Y
ADD BX,A
cmp BX,0
je exception
imul DX
idiv BX
jmp continue
exception:
Invoke StdOut,ADDR MsgError
jmp fin
continue:
MOV N,AX
Invoke dwtoa,N,ADDR ResStr
Invoke StdOut,ADDR Result
fin:
XOR EAX,EAX
Invoke StdOut,ADDR MsgExit
Invoke StdIn,ADDR inbuf,LengthOf inbuf
Invoke ExitProcess,0
End Start