Suma y resta en lenguaje ensamblador
Las instrucciones ADD y SUB realizan sumas y restas sencillas de datos binarios. Los números binarios negativos están representados en la forma de complemento a dos: Invierta todos los bits del numero positivo y sume 1. Los formatos generales para las instrucciones ADD y SUB. Como en otras instrucciones, no existen operaciones directas de memoria a memoria. El ejemplo siguiente utiliza el registro AX para sumar WORDA a WORDB:
WORDA DW 123 ;Define WORDA
WORDB DW 25 ;Define WORDB
. . .
MOV AX, WORDA ;Mueve WORDA al AX
ADD AX, WORDB ;Suma WORDB al AX
MOV WORDB, AX ;Mueve AX a WORDB
La figuraproporciona ejemplos de ADD y SUB para el procesamiento de valores en un byte y en una palabra. El procedimiento B10ADD utiliza ADD para procesar bytes y el procedimiento C10SUB utiliza SUB para procesar palabras.
TITLE P13ADD (COM) Operaciones ADD y SUB
.MODEL SMALL
.CODE
ORG 100H
BEGIN: JMP SHORT MAIN
;—————————————————————————-
BYTEA DB 64H ;DATOS
BYTEB DB 40H
BYTEC DB 16H
WORDA DW 4000H
WORDB DW 2000H
WORDC DW 1000H
;—————————————————————————-
MAIN PROC NEAR ;Procedimiento principal:
CALL B10ADD ;Llama a la rutina ADD
CALL C10SUB ;Llama a la rutina SUB
INT 21H
MAIN ENDP
; Ejemplos de suma (ADD) de bytes:
;—————————————————————————-
B10ADD PROC
MOV AL, BYTEA
MOV BL, BYTEB
ADD AL, BL ;registro a registro
ADD AL, BYTEC ;memoria a registro
ADD BYTEA, BL ;registro a memoria
ADD BL, 10H ;inmediato a registro
ADD BYTEA, 25H ;inmediato a memoria
RET
B10ADD ENDP
; Ejemplos de resta (SUB) de palabras:
;———————————————————-
C10SUB PROC
MOV AX, WORDA
MOV BX, WORDB
SUB AX,BX ;Registro a registro
SUB AX,WORDC ;Memora de registro
SUB WORDA, BX ;Registro de memoria
SUB BX, 1000H ;Inmediato de registro
SUB WORDA, 256H ;Inmediato de memoria
RET
C10SUB ENDP
END BEGIN
Desbordamientos
Este alerta con los desbordamientos en las operaciones aritméticas. Ya que un byte solo permite el uso de un bit de signo y siete de datos (desde -128 hasta +127), una operación aritmética puede exceder con facilidad la capacidad de un registro de un byte. Y una suma en el registro AL, que exceda su capacidad puede provocar resultados inesperados.