程序是否正确?

时间:2012-02-09 04:11:48

标签: assembly intel 8085

以下是我编写的用于乘以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

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

2 个答案:

答案 0 :(得分:0)

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

您需要对ADD A操作的进位结果执行某些操作。

答案 1 :(得分:0)

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

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