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.