Último mensaje de la página anterior:
Código: Seleccionar todo
ORG 0000h
INICIO: LDA 0A0h ;Carga el primer operando
CLC ;Borra el Carry
ADC 0A1h ;Suma a A el contenido de 00A1h
STA 0B0h ;Almacena el byte bajo del resultado
BCC NOCARRY ;Salta a NOCARRY si C=0
LDA #01 ;Carga 1 en A
STA 0B1h ;Almacena el byte alto (el acarreo)
JMP FIN
NOCARRY: LDA #00h ;Si no hay acarreo, byte alto a cero
STA 0B1h
FIN: NOP
END INICIO
Vamos a explicar este sencillo programa antes indicado:
Este programa suma dos números que están en memoria y deja el resultado en otro punto de la memoria.
Un apunte:
Si sumamos dos número que no superan el valor 255 en decimal o FF en hexadecimal, nos vale un solo byte para guardar el resultado.
Pero si el valor de la suma de dos bytes es mayor a 255 o FF, entonces necesitaremos en segundo byte.
Bien, pero la suma mas grande que se puede realizar con dos bytes es FF+FF=1FE (255+255=510).
Por lo que unicamente emplearemos un bit del byte de otra posición de memoria para seguir representando los valores que van desde 100 a 1FE. Este byte lo llamaremos byte alto.
¿Como sabemos que esa suma es superior a FF? Pues cuando la realizamos, el registro C (de acarreo) nos dice que hubo acarreo.
Es decir: de la suma, me llevo una.
El programa hace eso:
Suma dos números. Que están en la posición de memoria A0 y A1.
El resultado que da en el Acumulador lo pone como byte bajo en B0.
Y si el resultado ha dado acarreo, pone en 1 el bit de menor peso del byte alto B1. Aunque lo hace a lo bestia, poniendo directamente el valor de todo el byte de mayor peso con el valor 1.
Y si no da acarreo, pone el bit de mayor peso B1 a cero . Pero también a lo bestia, pone a cero todo el byte alto.
Y fin!