程序地址 | 机器码 | 反汇编语言 | 指令说明 |
;IN | 可以使用此指令在cop2000上输入数据 | ||
00 | 7C4B | MOV A,#4BH | 模拟输入X |
02 | 80 | MOV R0,A | 放入R0 |
03 | 88F9 | MOV 0F9H,A | 放入F9 |
05 | 1C80 | ADD A,#80H | 判断是不是负数 |
07 | 70 | MOV A,R0 | X放到A (求2X) |
08 | D4 | RL A | 左移一位 |
09 | A00D | JC YIYI | 是负数的话跳到YIYI |
0B | AC11 | JMP LLING | 不是就到LLING |
YIYI: | |||
0D | 6C80 | OR A,#80H | 将左移后的X首位强制换为1 |
0F | AC13 | JMP ZXC | |
LLING: | |||
11 | 5C7F | AND A,#7FH | 强制换为0 |
ZXC: | |||
13 | 88FA | MOV 0FAH,A | 换好后放入FA,此为2X |
15 | 70 | MOV A,R0 | 求 [-X] |
16 | E4 | CPL A | |
17 | 1C01 | ADD A,#01H | 末位加一 |
19 | 88FE | MOV 0FEH,A | [-X]放入OFEH |
1B | 1C80 | ADD A,#80H | 求2[-X] |
1D | A028 | JC ZHIYI | |
1F | 78FE | MOV A,0FEH | |
21 | D4 | RL A | |
22 | 6C80 | OR A,#80H | 首位置1 |
24 | 1C80 | ADD A,#80H | |
26 | AC2D | JMP o1 | |
ZHIYI: | |||
28 | 78FE | MOV A,0FEH | |
2A | D4 | RL A | |
2B | 6C80 | OR A,#80H | |
o1: | |||
2D | 88FD | MOV 0FDH,A | 2[-X]放入OFDH |
;IN | |||
2F | 7CA6 | MOV A,#0A6H | 模拟输入Y |
31 | 81 | MOV R1,A | Y放到R1 |
32 | 7C04 | MOV A,#04H | 循环次数 |
34 | 88FB | MOV 0FBH,A | 放入OFBH |
MAIN: | 主流程 | ||
36 | BCCA | CALL GET_N | 计算Y + Y - Y的值 |
38 | 73 | MOV A,R3 | |
39 | 1C01 | ADD A,#01H | 判断值是多少 并跳转到相应位置 |
3B | A44B | JZ FUYI | |
3D | 1C01 | ADD A,#01H | |
3F | A452 | JZ FUER | |
41 | 3C02 | SUB A,#02H | |
43 | A45E | JZ LING | |
45 | 3C01 | SUB A,#01H | |
47 | A456 | JZ YI | |
49 | AC5A | JMP ER | |
FUYI: | |||
4B | 78FE | MOV A,0FEH | 对应规则表找到要操作的数 |
4D | 83 | MOV R3,A | 放到R3 |
4E | BCAE | CALL GET_F8 | 得到部分积的新符号 |
50 | AC9F | JMP XIANG_JIA | |
FUER: | |||
52 | 78FD | MOV A,0FDH | 同上 |
54 | AC60 | JMP YOU_HUA2 | |
YI: | |||
56 | 78F9 | MOV A,0F9H | 同上 |
58 | AC60 | JMP YOU_HUA2 | |
ER: | |||
5A | 78FA | MOV A,0FAH | 同上 |
5C | AC60 | JMP YOU_HUA2 | |
LING: | |||
5E | 78FF | MOV A,0FFH | 同上 |
YOU_HUA2: | |||
60 | 83 | MOV R3,A | |
61 | BCAE | CALL GET_F8 | |
63 | AC9F | JMP XIANG_JIA | |
JIA_WAN: | |||
65 | BC75 | CALL YOU_YI_YI_CI | 把Y、部分积右移一次 |
67 | 78FB | MOV A,0FBH | 看循环是否结束 |
69 | 3C01 | SUB A,#01H | |
6B | A4EE | JZ EN | 结束就结束 |
6D | 88FB | MOV 0FBH,A | 不结束就继续 |
6F | BC75 | CALL YOU_YI_YI_CI | |
71 | AC36 | JMP MAIN | |
73 | ACEE | JMP EN | 分隔上下文,使思路更清晰 |
YOU_YI_YI_CI: | |||
75 | 71 | MOV A,R1 | Y放到A |
76 | 5C01 | AND A,#01H | 将末位移到0FCH |
78 | A47E | JZ TT1 | |
7A | 7C80 | MOV A,#80H | |
7C | AC80 | JMP TT2 | |
TT1: | |||
7E | 7C00 | MOV A,#00H | |
TT2: | |||
80 | 88FC | MOV 0FCH,A | |
82 | 71 | MOV A,R1 | 右移Y |
83 | D0 | RR A | |
84 | 81 | MOV R1,A | |
85 | 72 | MOV A,R2 | 判断Y符号 |
86 | 5C01 | AND A,#01H | |
88 | 71 | MOV A,R1 | |
89 | A48E | JZ TT3 | |
8B | 71 | MOV A,R1 | |
8C | 6C80 | OR A,#80H | |
TT3: | |||
8E | 81 | MOV R1,A | |
8F | 78F8 | MOV A,0F8H | 判断部分积符号并右移部分积 |
91 | 3C00 | SUB A,#00H | |
93 | A49B | JZ TNT | |
95 | 72 | MOV A,R2 | |
96 | D0 | RR A | |
97 | 6C80 | OR A,#80H | |
99 | AC9D | JMP TNT1 | |
TNT: | |||
9B | 72 | MOV A,R2 | |
9C | D0 | RR A | |
TNT1: | |||
9D | 82 | MOV R2,A | |
9E | CC | RET | |
XIANG_JIA: | |||
9F | 73 | MOV A,R3 | 把对应的值放到A并相加 |
A0 | 12 | ADD A,R2 | |
A1 | 82 | MOV R2,A | |
A2 | A0A6 | JC TMT | 求出完全0F8的值 |
A4 | AC65 | JMP JIA_WAN | |
TMT: | |||
A6 | 78F8 | MOV A,0F8H | |
A8 | 3C01 | SUB A,#01H | |
AA | 88F8 | MOV 0F8H,A | |
AC | AC65 | JMP JIA_WAN | |
GET_F8: | 求出部分0F8的值 | ||
AE | 1C80 | ADD A,#80H | 判断规则表对应数的首位是否为1 |
B0 | 72 | MOV A,R2 | 部分积放到A |
B1 | A0BF | JC T1 | 部分积首位与规则表首位相加在放到0F8H |
B3 | 1C80 | ADD A,#80H | |
B5 | A0BB | JC T3 | |
B7 | 7C00 | MOV A,#00H | |
B9 | ACC7 | JMP YOU_HUA | |
T3: | |||
BB | 7C01 | MOV A,#01H | |
BD | ACC7 | JMP YOU_HUA | |
T1: | |||
BF | 1C80 | ADD A,#80H | |
C1 | A0C5 | JC T2 | |
C3 | ACBB | JMP T3 | |
T2: | |||
C5 | 7C02 | MOV A,#02H | |
YOU_HUA: | |||
C7 | 88F8 | MOV 0F8H,A | |
C9 | CC | RET | |
GET_N: | |||
CA | 78FC | MOV A,0FCH | Y放到A |
CC | 1C80 | ADD A,#80H | 分别找到八种情况对应的4种值并将Y+Y-2Y结果存入R3 |
CE | A0D4 | JC YI2 | |
D0 | 7C00 | MOV A,#00H | |
D2 | ACD6 | JMP LINGG | |
YI2: | |||
D4 | 7C01 | MOV A,#01H | |
LINGG: | |||
D6 | 83 | MOV R3,A | |
D7 | 71 | MOV A,R1 | |
D8 | 5C01 | AND A,#01H | |
DA | A4E0 | JZ LING1 | |
DC | 7C01 | MOV A,#01H | |
DE | ACE2 | JMP YI1 | |
LING1: | |||
E0 | 7C00 | MOV A,#00H | |
YI1: | |||
E2 | 13 | ADD A,R3 | |
E3 | 83 | MOV R3,A | |
E4 | 71 | MOV A,R1 | |
E5 | 5C02 | AND A,#02H | |
E7 | A4ED | JZ LING3 | |
E9 | 73 | MOV A,R3 | |
EA | 3C02 | SUB A,#02H | |
LING2: | |||
EC | 83 | MOV R3,A | |
LING3: | |||
ED | CC | RET | |
EN: | 结束中断 | ||
EE | 71 | MOV A,R1 | 将最后的Y末位清零 |
EF | 5CFE | AND A,#0FEH | |
F1 | 81 | MOV R1,A | |
F2 | ACEE | JMP EN |
花了好多天搞出来的,不忍心在硬盘中把它直接删掉,(八位其中首位为符号位,结果存在R2与R1)