-
Notifications
You must be signed in to change notification settings - Fork 0
/
A001047M.ASM
147 lines (112 loc) · 2.73 KB
/
A001047M.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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
;--------------------------------------------------------------------
;
; a001047m.asm
;
; a[n] = 3^n - 2^n
;
; OEIS A001047
;
;--------------------------------------------------------------------
.model small
.stack 100h
EXTRN dispspace:PROC
EXTRN disp0x:PROC
EXTRN dispCR:PROC
EXTRN disph16:PROC
EXTRN dispd16:PROC
.data
max dw 0Ah
arr dw 0Ah DUP (00h)
.code
a001045 PROC
push bp
mov bp, sp
push si
mov dx,@data
mov ds,dx
mov cx, 0000h
mov si, 0000h
getanother:
call pow2n
mov bx, ax
call pow3n
sub ax, bx
mov arr[si], ax
inc si
inc si
inc cx
cmp cx, max
je displaynow
jmp getanother
displaynow:
mov cx, 0000h
mov si, 0000h
disploop:
mov ax, arr[si]
call dispA
inc cx
cmp cx, max
je alldone
inc si
inc si
jmp disploop
alldone:
mov ax, 4C00h
int 21h
a001045 endp
;-------------------------------------------------------------------------
pow3n PROC ; n in cx, 3^n in ax
push bx
push cx
push dx
mov ax, 01h ; if n = 0, 3^n = 1
cmp cx, 00h
je pdone
mov bx, 03h
p3loop:
mul bx
dec cx
cmp cx, 00h
je pdone
jmp p3loop
pdone:
pop dx
pop cx
pop bx
ret
pow3n endp
;-------------------------------------------------------------------------
pow2n PROC ; n in cx, 2^n in ax
push bx
push cx
push dx
mov ax, 01h
shl ax, cl
pop dx
pop cx
pop bx
ret
pow2n endp
;-------------------------------------------------------------------------
dispA PROC ; display routine for OEIS
; a......(n) in ax, n in cx
push ax
push bx
push cx
push dx
mov dx, ax
mov ax, cx
call dispd16
call dispspace
call dispspace
call dispspace
mov ax, dx
call dispd16
call dispCR
pop dx
pop cx
pop bx
pop ax
ret
dispA endp
end