Manipulando números de 32 bits con registros de 16 bits en 8086
Pregunta
Estoy tratando de escribir un programa que obtenga dos números decimales de 6 dígitos y muestre la adición de ellos, pero en 16 bit 8086 definí los números como palabra doble y puse lo en la palabra 1 y ho en la palabra 2. similar al código a continuación pero yo No tengo ninguna idea para hacer a continuación, ¿puede algún cuerpo sugerirme algoritmo para las próximas operaciones? Thnx
x dd(?)
next_no:
mov cl,2
mov ch,4
two_bit:
getch
sub al,30h
mov bl,10
mul bl
mov di,ax
add word ptr x+2,di
dec cl
jnz two_bit
fourbit:
getch
sub al,30h
mov bl,10
mul bl
mov di,ax
add word ptr x,di
dec ch
jnz fourbit
En este programa, DI es un lugar para almacenar el número realizado a través del bucle cuando el usuario ingrese un número DI múltiple a 10 y el nuevo dígito se agregará a DI como: proccess de obtener 28 di = 0*10+2 = 2 di = 2*10*+8 = 28
Solución
En lugar de seguir su código sin comisión, presentaré un ejemplo independiente.
Supongamos que tiene un número de 32 bits en DX: AX y un número de 32 bits en CX: BX (esta notación significa que las 16 bocaduras altas se almacenan en DX, por ejemplo, y los 16 bits bajos en AX). Para agregar estos valores y dejar el resultado en dx: ax, lo haría:
add ax,bx
adc dx,cx
los add
La instrucción agrega los dos valores y sets el b (transporte) bit a 1 o 0 dependiendo de si había un acarreo o no. los adc
La instrucción agrega los dos valores más El valor del bit de transporte (y luego establece el bit de transporte nuevamente). De esta manera, puede agregar valores de cualquier tamaño continuando con más adc
instrucciones.