SoloCodigo

Programación General => ASM (Ensamblador) => Mensaje iniciado por: tirengarfio en Martes 19 de Febrero de 2008, 13:38

Título: Sobre Los Registros Aritmeticos
Publicado por: tirengarfio en Martes 19 de Febrero de 2008, 13:38
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
  1.   DOSSEG
  2.   .MODEL SMALL
  3.   .STACK 100h
  4.   .DATA   ;Segmento de datos.
  5. dato1   DB 35h   ;Primer operando
  6. dato2   DB 47h   ;Segundo operando
  7. resul   DW ?   ;Para almacenar el resultado
  8.  
  9. .CODE
  10.  
  11. INICIO:
  12.   mov ax,@data
  13.  
  14.   mov ds,ax
  15.  
  16.   mov ah,dato1&#59;Primer operando
  17.  
  18.   mov al,dato2&#59;Segundo operando
  19.  
  20.   xor bl,bl&#59;Pone a cero BL. Donde se guardará el acarreo...ANTES DE LA SUMA!!!
  21.  
  22.   add al,ah&#59;Suma AL+AH y guarda el resultado en AL. CF se puede activar
  23.  
  24.   adc bl,0&#59;Esta es la manera de almacenar el valor del acarreo (CF) de la suma
  25.     ;(0 ó 1) en bl...
  26.  
  27.  
  28.   mov ah,bl&#59;En AX el resultado completo (2 bytes): SUMA + ACARREO.
  29.  
  30.   mov resul,ax&#59;Guarda el resultado
  31.   
  32. FIN:
  33.   mov ah,4ch
  34.   int 21h
  35.   END inicio
  36.  


Un saludo

Javier
Título: Re: Sobre Los Registros Aritmeticos
Publicado por: Eternal Idol en Martes 19 de Febrero de 2008, 14:40
Se les dio la gana; podian usar 8 bits de cualquier registro general.

http://en.wikipedia.org/wiki/X86_architecture#x86_registers (http://en.wikipedia.org/wiki/X86_architecture#x86_registers)
http://pdos.csail.mit.edu/6.828/2006/readings/i386/ADC.htm (http://pdos.csail.mit.edu/6.828/2006/readings/i386/ADC.htm)
Título: Re: Sobre Los Registros Aritmeticos
Publicado por: tirengarfio en Martes 19 de Febrero de 2008, 19:30
Cita de: "Eternal Idol"
Se les dio la gana; podian usar 8 bits de cualquier registro general.

 


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
Título: Re: Sobre Los Registros Aritmeticos
Publicado por: Eternal Idol en Martes 19 de Febrero de 2008, 20:15
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

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.