La lectura de número decimal de 5 dígitos en el montaje x86
Pregunta
Estoy escribiendo un convertidor de números entre el (b h d) sistemas de numeración, el programa acepta 16 bits número binario, o 4 hex dígitos. o 5 decimal.
el procedimiento de lectura que he escrito parece tener un problema cuando el valor decimal es superior a 65535 (FFFFh) desde im tratar con registros de 16 bits y no puede contener valores más grandes
Le agradecería que si me ayudas.
aquí está mi proceso de lectura:
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
Gracias Nataly
Solución
necesita más bits para ir por encima de 65536 (0xFFFF) por lo que necesita un registro más grande, de 32 bits, u otro registro de 16 bits. Conjunto ese otro registro de 16 bits a cero y después de su add para añadir los dígitos hasta el momento, puso un complemento con equipaje para añadir el bit de acarreo en esta siguiente registro.
Así 0xFFFF + 5, por ejemplo, es 0x10004 o 0x0004 con el conjunto de bit de acarreo, tomar este otro registro añadir el bit de acarreo a él a recoger ese otro poco, ahora tienes 0x0001 en el registro de alto orden y 0x0004 en la baja registro de orden.
Absolutamente ninguna diferencia que si tuviera que ver además con lápiz y papel. 99 + 5 = 04 con un "llevar el uno" a la posición de las centenas. Y cuando el lugar de las centenas se desborda a llevar al siguiente lugar. binario es el mismo simplemente mucho más fácil. Cada columna de bits es como una columna decimal cuando lo hace en el papel, es sólo visible desde el bit 0 al bit 15, pero el acarreo desde el bit 15 es visible para que pueda sumadores cadena juntos y hacerlos tan arbitrariamente amplia como desee.