我有一个任务:
使用条件跳转编写汇编代码以添加以下十五个奇数。
奇数: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
答案 0 :(得分:1)
这肯定是一种方式,你需要特别注意的事实是你在ax
累积总和然后你覆盖{{1}当您使用ax
退出程序时。
巧合的是,这些数字总和为255,因此它实际上适合进入int 21, fn 4c
,这是该中断用于返回代码的寄存器(参见Ralf Brown's excellent interrupt list })。
DOS是否会对它做任何聪明的事情,我不能说: - )
为了在退出程序时保留al
,只需执行以下操作:
al
您可能要考虑的另一件事是直接打印项目而不是返回它。以下代码显示了如何使用我的库中的函数执行此操作,该函数能够将mov ah, 0x4c
int 0x21
寄存器输出为十进制值:
al