【发布时间】:2016-02-19 18:30:42
【问题描述】:
我有一个任务:
使用条件跳转编写汇编代码以添加以下 15 个奇数。
奇数:3、5、7、9、11、13、15、17、19、21、23、25、27、29、31
我提出了这个解决方案。我想检查一下它有什么问题...
[org 0x0100]
mov bx, num1
mov cx, 15
mov ax, 0
li:
add ax, [bx]
add bx, 2
sub cx, 1
jnz li
mov ax, 0x4c00
int 0x21
num1: dw 3, 5, 7, 9, 11, 13, 15, 17, 19, 21,23,25,27,29,31
【问题讨论】:
-
是什么让你觉得它有问题?我觉得没问题
-
我正在使用 AFD 来查找错误...并且代码没有在其上运行...寄存器重载类型错误将被写入它们。
-
您的代码看起来不错。到目前为止,我从未使用过 AFD.EXE。我下载了它,并在使用 F1 的代码中运行了您的代码,以单步执行您的代码,直到 before 调用
mov ax, 0x4c00int 0x21和 AX 包含0xFF,即 255十进制。 3+5+7+9+11+13+15+17+19+ 21+23+25+27+29+31 = 255 所以我觉得不错。您在哪里看到此寄存器过载类型错误?我用nasm -f bin testit.asm -o testit.com组装了你的代码。然后我加载了 DOSBOX 并加载了AFD TESTIT.COM -
你为什么要
mov ax, 0x4c00?它似乎覆盖了加法的结果。 -
@MikeCAT OP 未能提及这部分问题 解释程序的每条指令,并提供/粘贴将在 AFD 中运行的汇编和调试程序结果的快照(完整Screen Debugger) 窗口显示 AX 寄存器中执行的代码最终结果。 .看起来他们只是假设通过调试器来找到他们的 AX 值。我认为 AX 最终被破坏(或不使用)并不重要