我写的(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位进位可见,所以你可以链加法器放在一起,让它们作为任意宽如你所愿。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top