0

我正在(bhd)编号系统之间编写一个数字转换器,该程序接受 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

谢谢娜塔莉

4

1 回答 1

2

您需要更多位才能超过 65536 (0xFFFF),因此您需要更大的寄存器、32 位或另一个 16 位寄存器。将其他 16 位寄存器设置为零,并且在您添加到目前为止的数字之后,将带有进位的加法添加到下一个寄存器中。

因此,例如 0xFFFF + 5 是设置了进位位的 0x10004 或 0x0004,将这个其他寄存器添加进位位以获取其他位,现在您在高位寄存器中有 0x0001,在低位寄存器中有 0x0004。

与用铅笔和纸做加法完全没有区别。99+5 = 04 用“带一个”到百位。当数百个地方溢出时,您将携带到下一个地方。二进制是一样的,只是容易得多。当您在纸上执行时,每个位列就像一个十进制列,它只是从位 0 到位 15 是不可见的,但是从位 15 的进位是可见的,因此您可以将加法器链接在一起并使其任意宽。

于 2010-10-27T16:59:48.107 回答