Programación General > ASM (Ensamblador)
Sobre Los Registros Aritmeticos
(1/1)
tirengarfio:
Saludos,
en este codigo que pongo aqui abajo, el acarreo de la suma se pasa a bl.
Segun he visto, el registro bl se usa en transferencias de datos entre la memoria y el procesador.
¿Por que se usa entonces bl si no estamos haciendo una transferencia entre la memoria y el procesador?¿Se podria haber usado cualquier otro registo aritmetico(bh, dl, dh...)?
--- Código: Text --- DOSSEG .MODEL SMALL .STACK 100h .DATA ;Segmento de datos.dato1 DB 35h ;Primer operandodato2 DB 47h ;Segundo operandoresul DW ? ;Para almacenar el resultado .CODE INICIO: mov ax,@data mov ds,ax mov ah,dato1;Primer operando mov al,dato2;Segundo operando xor bl,bl;Pone a cero BL. Donde se guardará el acarreo...ANTES DE LA SUMA!!! add al,ah;Suma AL+AH y guarda el resultado en AL. CF se puede activar adc bl,0;Esta es la manera de almacenar el valor del acarreo (CF) de la suma ;(0 ó 1) en bl... mov ah,bl;En AX el resultado completo (2 bytes): SUMA + ACARREO. mov resul,ax;Guarda el resultado FIN: mov ah,4ch int 21h END inicio
Un saludo
Javier
Eternal Idol:
Se les dio la gana; podian usar 8 bits de cualquier registro general.
http://en.wikipedia.org/wiki/X86_architecture#x86_registers
http://pdos.csail.mit.edu/6.828/2006/readings/i386/ADC.htm
tirengarfio:
--- Cita de: "Eternal Idol" --- Se les dio la gana; podian usar 8 bits de cualquier registro general.
--- Fin de la cita ---
Pero por ejemplo, el enlace de de la wikipedia que me has dejado, dice que solo se puede usar CX como contador de la instruccion loop.
A pesar de esa restriccion, ¿podria entonces usar CL o CH en mi codigo en vez de BL?
Gracias
Javi
Eternal Idol:
--- Cita de: "tirengarfio" --- Pero por ejemplo, el enlace de de la wikipedia que me has dejado, dice que solo se puede usar CX como contador de la instruccion loop.
A pesar de esa restriccion, ¿podria entonces usar CL o CH en mi codigo en vez de BL?
Gracias
Javi
--- Fin de la cita ---
Si, esa restriccion se refiere a los loops, en ese codigo no hay ninguno.
Igual lo deberias haber probado ya, con ese codigo no tiene mucho sentido ya que no hay acarreo ... cambialos asi:
dato1 DB 35h ;Primer operando
dato2 DB 0ffh ;Segundo operando
Fijate cual es el resultado.
Cambia los lugares donde se usa bl por cl:
xor cl, cl
adc cl, 0
mov ah,cl
Fijate cual es el resultado.
Navegación
Ir a la versión completa