-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMult16.s
More file actions
112 lines (94 loc) · 1.86 KB
/
Mult16.s
File metadata and controls
112 lines (94 loc) · 1.86 KB
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
Mult16_SignedEntry:
;Get sign-extension bit patterns
LOD Mult16_Op1[0]
SIGNEX ACC
STR Mult16_Op1Ex[0]
LOD Mult16_Op2[0]
SIGNEX ACC
STR Mult16_Op2Ex[0]
;Initialise variables
Mult16_UnsignedEntry:
;appropriately extend Op1
LOD Mult16_Op1Ex[0]
STR Mult16_1full[0]
STR Mult16_1full[1]
STR Mult16_1full[2]
STR Mult16_1full[3]
;appropriately extend Op2
LOD Mult16_Op2Ex[0]
STR Mult16_2full[0]
STR Mult16_2full[1]
STR Mult16_2full[2]
STR Mult16_2full[3]
Mult16_32Entry:
LOD N_[0]
STR Mult16_Ans[0]
STR Mult16_Ans[1]
STR Mult16_Ans[2]
STR Mult16_Ans[3]
STR Mult16_Ans[4]
STR Mult16_Ans[5]
STR Mult16_Ans[6]
STR Mult16_Ans[7]
STR Mult16_loopCount[0]
LOD N_[1]
STR Mult16_mask[0]
;Outer loop
Mult16_outerLoopStart:
LOD Mult16_2full[7]
STR Mult16_o2nib
;Inner loop
Mult16_innerLoopStart:
LOD Mult16_o2nib
NND Mult16_mask
NND N_[F]
;Add, if necessary
JMP Mult16_doneAdd
ADD32 Mult16_1full Mult16_Ans INTO Mult16_Ans
;Mess with operands appropriately
Mult16_doneAdd:
LSHIFT32 Mult16_1full INTO Mult16_1full
LROT Mult16_mask INTO Mult16_mask
;Leave inner loop, if it is time to do so
UCLC ACC
LOD Mult16_mask
ADD N_[F]
JMP Mult16_doneInner
LOD N_[0]
JMP Mult16_innerLoopStart
;Done inner loop. Do outer loop stuff.
Mult16_doneInner:
LOD Mult16_2full[6]
STR Mult16_2full[7]
LOD Mult16_2full[5]
STR Mult16_2full[6]
LOD Mult16_2full[4]
STR Mult16_2full[5]
LOD Mult16_2full[3]
STR Mult16_2full[4]
LOD Mult16_2full[2]
STR Mult16_2full[3]
LOD Mult16_2full[1]
STR Mult16_2full[2]
LOD Mult16_2full[0]
STR Mult16_2full[1]
UCLC ACC
LOD Mult16_loopCount
ADD N_[1]
STR Mult16_loopCount
ADD N_[8]
;Return, if it is time
Mult16_RetAddr:
JMP 0000
LOD N_[0]
JMP Mult16_outerLoopStart
Mult16_Ans: .data 8
Mult16_1full: .data 4
Mult16_Op1: .data 4
Mult16_2full: .data 4
Mult16_Op2: .data 4
Mult16_loopCount: .data 1
Mult16_mask: .data 1
Mult16_o2nib: .data 1
Mult16_Op1Ex: .data 1
Mult16_Op2Ex: .data 1