Add a byte number from one memory location to a byte from subsequent memory location and put sum in the third memory location. Also save carry flag in the least significant bit of fourth memory location.
; ABSTRACT : This program adds 2-8-bit words in the memory locations
; : NUM1 and NUM2. The result is stored in the memory
; : location RESULT. The carry bit, if any will be stored as
; : 0000 0001 in the location CARRY
; ALGORITHM:
; get NUM1
; add NUM2 in it
; put sum into memory location RESULT
; rotate carry in LSB of byte
; Mask off upper seven bits of byte
; store the result in the CARRY location.
;
; PORTS: None used
; PROCEDURES: None used
; REGISTERS: Uses CS, DS, AX
;
DATA SEGMENT
NUM1 DB 25h ; First number
NUM2 DB 80h ; Second number
RESULT DB ? ; Put sum here
CARRY DB
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS: DATA
START: MOV AX, DATA ; Initialise data segment
MOV DS, AX ; register using AX
MOV AL, NUM1 ; Load the first number in AL
ADD AL, NUM2 ; Add 2ndnumber in AL
MOV RESULT, AL ; Store the result
RCL AL, 01 ; rotate carry into LSB
AND AL, 00000001B ; Mask out all but LSB
MOV CARRY, AL ; Store the carry result
MOV AH, 4CH
INT 21H
CODE ENDS
END START
Discussion:
RCL instruction brings carry in the least significant bit position of AL register. AND instruction is employed for masking higher order bits of the carry now in AL.
In the same way we can also write applications employing other shift instructions.