题
我写的(B H d)之间的一个数字转换器编号系统,所述程序接受 16位二进制数,或4个数字的十六进制。或5(十进制)。
我写的读取过程似乎有一个问题,当十进制值是65535以上(FFFFH),因为即时处理16位寄存器并且它不能含有较大的值
我想如果你帮我欣赏它。
这是我的读过程:
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
解决方案
您需要更多的比特去以上65536(0xFFFF的),所以需要较大的寄存器,32位,或另外的16位寄存器。组其他16位寄存器到零,你的添加,添加数字至今后,把随身带一个附加的进位加入到这个下一个寄存器。
所以0xFFFF的+ 5例如是0x10004或0x0004与进位位组,借此其它寄存器中的进位位加给它拿起其它位,现在你在低具有高阶寄存器0×0001和0x0004为了寄存器。
比,如果你是做加法用铅笔和纸绝对没有什么区别。 99 + 5 = 04与“携带一个”到百位。而当百位溢出您携带至下一个地方。二是一样的只是更容易。每个位柱就像是当你在纸上小数列,它仅仅是从第0位到第15位看不见,但是从第15位进位可见,所以你可以链加法器放在一起,让它们作为任意宽如你所愿。
不隶属于 StackOverflow