用于查找阶乘的汇编级编程

Assembly level programming to find the factorial

MVI B 07h
LXI H 0007h
LXI D 0007h
DCR B
LOOP1: DCR B
MOV C B
INR B
LOOP: DAD D
DCR C
JNZ LOOP
MOV E L
MOV D H
DCR B
JNZ LOOP1
HLT

我在我的代码中找不到问题。你能帮帮我吗?它给了我部分错误的答案。两个 LSB 位是正确的,但 MSBs.

不正确

我不确定你为什么要在 LOOP1 标签处对 B 寄存器进行额外的递减(然后递增),但是当 B 是其中之一时导致 C 变为 0,然后循环到 FFh 并再执行乘法循环 255 次。

为什么不取出 DCR B / INR B 并在乘法循环之前将 H 寄存器设置为 0。完整的程序如下所示:

MVI B, 07h
LXI H, 0007h
LXI D, 0007h
DCR B

LOOP1:
    MOV C, B
    LXI H, 0

    LOOP:
        DAD D
        DCR C
        JNZ LOOP

    MOV E, L
    MOV D, H
    DCR B
    JNZ LOOP1

HLT