-
Notifications
You must be signed in to change notification settings - Fork 0
/
code.asm
105 lines (105 loc) · 1.17 KB
/
code.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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
.model small
.stack 100h
.data
t1 dw 1 dup(?)
t2 dw 1 dup(?)
t3 dw 1 dup(?)
t4 dw 1 dup(?)
t5 dw 1 dup(?)
t6 dw 1 dup(?)
t7 dw 1 dup(?)
t8 dw 1 dup(?)
t9 dw 1 dup(?)
t10 dw 1 dup(?)
t11 dw 1 dup(?)
t12 dw 1 dup(?)
t13 dw 1 dup(?)
.code
main proc
mov ax, @data
mov ds, ax
mov t11, 5
mov bx, t11
mov t12, bx
mov t1, bx
call fact
mov t13, dx
mov bx, t13
mov t10, bx
mov ax, t10
call println
mov ah, 4ch
int 21h
main endp
println proc
push ax
push bx
push cx
push dx
or ax, ax
jge @end_if1
push ax
mov dl, '-'
mov ah, 2
int 21h
pop ax
neg ax
@end_if1:
xor cx, cx
mov bx, 10D
@repeat1:
xor dx,dx
div bx
push dx
inc cx
or ax, ax
jne @repeat1
mov ah, 2
@print_loop:
pop dx
or dl, 30h
int 21h
loop @print_loop
mov dl, 0ah
int 21h
mov dl, 0dh
int 21h
pop dx
pop cx
pop bx
pop ax
ret
println endp
fact proc
mov t2, 1
mov t3, 0
mov bx, t1
cmp bx, t2
jg L1
mov t3, 1
L1:
cmp t3, 0
je L2
mov t4, 1
mov dx, t4
ret
L2:
push t1
mov t5, 1
mov bx, t1
mov cx, t5
sub bx, cx
mov t6, bx
mov t7, bx
mov t1, bx
call fact
mov t8, dx
pop t1
mov ax, t1
mov bx, t8
imul bx
mov t9, ax
mov dx, t9
ret
fact endp
end main