-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathbigmul_test.asm
95 lines (87 loc) · 1.11 KB
/
bigmul_test.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
; Tests all 16 x 16 bit = 32 bit integer multiplications
; Out: BC = 0, if correct, prefix error length otherwise
ORG 0x8000
START: EXX
PUSH HL
EXX
LOOP: LD A,(XVALUE)
LD B,A
LD A,(YVALUE)
LD C,A
CALL MUL8
LD (EXPECT),HL
LD A,(XVALUE+1)
LD B,A
LD A,(YVALUE+1)
LD C,A
CALL MUL8
LD (EXPECT+2),HL
LD A,(XVALUE)
LD B,A
LD A,(YVALUE+1)
LD C,A
CALL MUL8
CALL ADDMID
LD A,(XVALUE+1)
LD B,A
LD A,(YVALUE)
LD C,A
CALL MUL8
CALL ADDMID
LD HL,PRODUCT
EXX
LD HL,XVALUE
LD DE,YVALUE
LD B,2
CALL BIGMUL
EXX
LD DE,PRODUCT
LD B,4
L2: DEC HL
DEC DE
LD A,(DE)
CP (HL)
JR NZ,ERROR
DJNZ L2
LD HL,(XVALUE)
INC HL
LD (XVALUE),HL
LD A,L
OR H
JR NZ,LOOP
LD HL,(YVALUE)
INC HL
LD (YVALUE),HL
LD A,L
OR H
JR NZ,LOOP
POP HL
EXX
LD BC,0
RET
ERROR: POP HL
LD A,B
EXX
LD C,A
LD B,0
RET
ADDMID: LD A,(EXPECT+1)
ADD A,L
LD (EXPECT+1),A
LD A,(EXPECT+2)
ADC A,H
LD (EXPECT+2),A
RET NC
LD A,(EXPECT+3)
INC A
LD (EXPECT+3),A
RET
INCLUDE "bigmul.asm"
INCLUDE "mul8bit.asm"
INCLUDE "multab.asm"
XVALUE: DEFS 2
INCLUDE "align.asm"
YVALUE: DEFS 2
INCLUDE "align.asm"
EXPECT: DEFS 4
PRODUCT: