-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path38.asm
77 lines (62 loc) · 1.22 KB
/
38.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
[org 0x0100]
jmp start
n: dw 5
m: dw 4
binomial:
push bp
mov bp, sp
sub sp, 2
push ax
push bx
push si
push dx
push cx
push di
mov word[bp-2], 0 ;initialize local variable to 0
mov bx, [bp+4] ;address of input
mov ax, [bp+6]
cmp bx,1
je true1
cmp ax,0
je true1
cmp ax,bx
je true1
mov cx,ax
mov si,bx
dec cx
dec si
sub sp, 2 ;space for return value
push ax ;push address of input
push si
call binomial
pop dx ;call function
sub sp, 2 ;space for return value
push cx ;push address of input
push si
call binomial
pop di
add dx,di
jmp false1
true1:
mov word[bp+8], 1 ;moving binomial from ax to return value space
jmp end1
false1:
mov word[bp+8],dx
end1:
pop di
pop cx
pop dx
pop si ;restore value of si
pop bx ;restore value of bx
pop ax ;restore value of ax
add sp, 2 ;removing local variable from memory
pop bp ;restoring old value of bp
ret 4 ;removing parameters from stack
start:
sub sp, 2 ;space for return value
push word[m] ;push address of input
push word[n]
call binomial ;call function
pop dx ;pop return value
mov ax, 0x4c00
int 21h