以下是我编写的用于乘以2位数的程序。我的一个朋友说这个程序不正确。我无法验证它,所以我想验证它。我刚刚开始学习汇编编程。以下程序使用大量寄存器。
LDA C001H
MOV B,A
LDA C002H
MOV D,A
MOV C,0H
CMP C
JZ ZRESULT // CHECKED FOR C002
MOV A,B
CMP C
JZ ZRESULT // CHECKED FOR COO1
LOOP : ADD A
MOV E,A
LDA 01H
DEC D
CMP D
JZ ANSWER
JNZ LOOP
ZRESULT : LDA 0H
STA 2500H
OUT PORT1
ANSWER : MOV A,E
STA 2500H
OUT PORT1
这个程序是否正确?如果没有,请告诉其中的更正。
答案 0 :(得分:0)
问题是,将两个8位数相乘可能会得到一个16位的结果。不过,你只给出了8位的结果。
您需要对ADD A
操作的进位结果执行某些操作。
答案 1 :(得分:0)
您需要检测加法循环中的溢出。一种天真的方法是检查添加后结果是否减少。以20 * 13为例。 20 * 12将在寄存器中给出240,但是加上20,你不会得到260,你会得到4(260%256)。
更好的方法是检查条件寄存器中的进位标志。