Cómo implementar sumas y restas de 32 bits en un microcontrolador de 8 bits
Cuando hablas de implementar sumas y restas de 32 bits, te refieres a operaciones de doble byte.
;Subrutina de resta de doble byte
;Parámetros : R6R5, R4R3
; Devolver: R2R3
DSUB: MOV A, R5
CLR C
SUBB A, R3 p >
MOV R3, A
MOV A, R6
SUBB A, R4
MOV R2, A
RET
; subrutina de adición de doble byte
; Parámetros: R6R5, R4R3
; Retorno: R2R3
LADD: MOV A, R5
AÑADIR A, R3
MOV R5, A
MOV A, R6
AÑADIR A, R4
MOV R6, A
MOV A, R5
MOV R3, A
MOV A, R6
MOV R2, A
RET
; Subrutina de multiplicación de doble byte
; Parámetros: R6R5, R4R3
; >DMUL: MOV A, R5;
MOV B, R3
MUL AB; A prepara el multiplicador
MOV R1, B; almacenamiento temporal alto R1
MOV B, R6
MUL AB; > AGREGAR A, R1; el bit bajo del producto más el bit alto del producto se almacenan temporalmente en R4
MOV R4, A
CLR A; >
ADDC A, B; el acarreo del bit alto más el bit bajo se almacena en R5
MOV R1, A
MOV A, R4
MOV B, R5
MUL AB; R5*R4
AGREGAR A, R1; agregue R5 al bit bajo del tercer producto y almacene temporalmente R6
XCH
A, R4
MOV FO, C; guardar bit de transporte
MOV A, R6
MUL AB; p> ADD A, R1; cuarta vez Agregue R5 al bit bajo del producto y almacene R5
MOV R1, A
CLR A
MOV ACC .0, C
MOV C, FO
ADDC A, B; el acarreo del bit alto más el bit bajo del cuarto producto se almacena en R4
MOV R2, A
RET
; Programa de división de doble byte
; Parámetros: R2R1R4R3, R6R5
; R4R3 (cociente), R2R1 (resto)
DDIV: MOV A, R1
CLR C
SUBB A, R5
MOV A, R2
SUBB A, R6
JNC DIV1; El byte de orden superior del dividendo es mayor que el divisor, por lo que se transfiere al procesamiento de desbordamiento.
MOV B, DIV1; Ejecutar división sin desbordamiento, establecer el número de ciclos
MOV B, #16; El dividendo se transfiere al procesamiento de desbordamiento
Desplazar un bit a la izquierda, enviar cero a el bit bajo
DDIV2: CLR C
MOV A, R3
RLC A
MOV R3, A
MOV A, R2
RLC A
MOV R2, A
MOV A, R1
RLC A
MOV R1, A
XCH A, R2
RLC A
XCH A, R2
MOV FO, C; proteger el bit más alto desplazado
CLR C
SUBB A, R5 el bit alto desplazado es 1, suficiente para reducir DV2
MOV A, R2;
SUBB
A, R6
JB FO, DV2
JC DV3
DV2: MOV R2, A; devolver el resultado de la resta
MOV A, R0
MOV R1, A
INC R7; el anterior
DV3: DJNZ B, DV2 no es suficiente para reducir, el número de ciclos es. -1
CLR FO; ejecución normal sin desbordamiento, FO=0
RET
DIV1: SETB FO; establecer indicador de desbordamiento
RET