我正在(b h d)编号系统之间编写一个数字转换器,程序接受 16位二进制数,或4位十六进制数。或5位小数。
当我处理16位寄存器并且它不能包含更大的值时,我写的读取过程似乎有一个问题,因为十进制值高于65535(FFFFh) 如果你帮助我,我将不胜感激。这是我的阅读程序:
Proc R
mov ah,01;read first digit
int 21h
mov saveal,al
cmp al,0dh; if it is a new line break then dont read
jz toret
mov al,radex ; the radex value already entered by user
mov ah,0
mul dx
mov dx,ax; multiplies the radex by the number entered so far to shift it 1 dig.
mov al,saveal
cmp al,65
jge big2
sub al,30h; taking decimal value of the character
cont2:
call checkerror
mov ah,0
add dx,ax; adding the digit to the number read so far
loop R
toret:
ret
endp
由于 NATALY
答案 0 :(得分:2)
您需要更多位超过65536(0xFFFF),因此您需要更大的寄存器,32位或另一个16位寄存器。将其他16位寄存器设置为零,并在添加后添加数字到目前为止,将带有进位的add添加到下一个寄存器中。
所以0xFFFF + 5例如是进位设置为0x10004或0x0004,取另一个寄存器加进位到它接收另一位,现在高位寄存器中有0x0001而低位有0x0004订单注册。
与使用铅笔和纸张添加相比,绝对没有区别。 99 + 5 = 04,带有“携带一个”到数百个位置。当数百个地方溢出时,你会带到下一个地方。二进制是相同的更容易。当你在纸上执行时,每个位列都像一个十进制列,它从第0位到第15位是不可见的,但第15位的进位是可见的,因此你可以将加法器链接在一起,并根据需要任意加宽。