这代码没有问题,只是不太优雅
我也写了一个,用了 xchg bx, ax
这就很优雅,^_^
assume cs:code
code segment
divdw:
push bx
mov bx, ax
mov ax, dx
xor dx, dx
div cx
xchg bx, ax
div cx
mov cx, dx
mov dx, bx
pop bx
ret
start:
mov ax, 4240h
mov dx, 000fh
mov cx, 0ah
call divdw
mov ax, 4c00h
int 21h
code ends
end start
这代码看似没有处理余数,实则已经处理了,只不过处理的非常巧妙,巧妙到没有处理,^_^
因为他就已经在那了,已经不需要处理了
你说的是没有乘65536吗?需要明面上乘吗?
乘65536意味着什么?
左移16位
把这个数字从16位变成32位
而且这个32位数字的低16位全是0
这个全是0的低16位需要保存吗?
高16位不就是左移之前的那个低16位吗
直接保存这个左移之前的16位数字不就可以了?
反正左移之后也还是这个数字
所以,重看代码
然后再提出你的问题
|