用于查找阶乘的汇编级编程
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
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