-1

以下是我编写的用于将 2 ,8 位数字相乘的程序。我的一位朋友告诉我该程序不正确。我无法验证它,所以我想验证它。我刚刚开始学习汇编编程。以下程序使用大量寄存器。

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

这个程序正确吗?如果没有,请告诉其中的更正。

4

2 回答 2

0

您将需要在加法循环中检测溢出。一种天真的方法是检查加法后结果是否减小。以20*13为例。20*12 将在寄存器中给出 240,但再加上 20,你不会得到 260,你会得到 4 (260%256)。

更好的方法是检查条件寄存器中的进位标志。

于 2012-02-09T06:43:53.360 回答
0

问题是两个 8 位数字相乘可能会得到 16 位结果。不过,您只给出了 8 位结果。

您需要对操作的进位结果做一些事情ADD A

于 2012-02-09T04:26:35.857 回答