我有下一个问题: 当我试图做一个较小的数字分成一个更大的一个我得到商很高,我不明白为什么。这里是我试图划分1到5的程序,结果是256.(也是变量'a'和'b'必须是db类型的) 有人可以帮助我吗?谢谢你在前进划分一个小数字不会给商0
.model small
afisareanr macro nr
local m11
local m
xor ax, ax
mov ax, nr
push ax
mov si, 10
mov di, 5
mov dx, 0
cmp ax, 0
jge m
neg ax
m:div si
add dl, 30h
mov s[di],dl
xor dx,dx
dec di
cmp ax, 0
jne m
pop ax
cmp ax, 0
jge m11
mov s[di], '-'
m11:
mov ah, 9
lea dx, s
int 21h
endm
.stack
.data
a db 5
b db 1
s db 6 dup(" "), '$'
.code
mov ax, @data
mov ds, ax
xor ax, ax
xor bx, bx
mov al, b
idiv a
mov bx, ax
afisareanr bx
mov ax, 4c00h
int 21h
end
非常感谢你,我了解正在发生的事情以及如何出现256,是的,你是对的,我是新手,我们刚刚开始在大学学习。 –
要查找划分的规范复制目标,请查看[x86标记wiki](https://stackoverflow.com/tags/x86/info)并搜索“idiv”。这是我添加FAQ部分的原因之一。 (嗯,这不是一个确切的*重复的,因为这里的问题并没有意识到剩下的是AH,而不是没有清除上半部分的股息,但是Michael对链接dup的回答是8位操作数大小划分确实提到了它是如何工作的部分。不同的问题相同的答案。)无论如何,我不会建议删除这个答案,这很好。 –