8086 program to Subtract two 16 bit numbers
03:52
ØØ Explanation :
· Consider that a word of data is present in the AX register and second word of data is present in the BX register.
· We have to subtract the word in BX with the word AX.
· Using subtract (SUB) instruction, subtract the contents of two registers.
AX = 1234 H
|
1234 H
| |
BX = 0100 H
|
–
|
0100 H
|
1134 H
|
ØØ Algorithm :
Step I : Initialise the data segment.
Step II : Get the first number in AX register.
Step III : Get the second number in BX register.
Step IV : Add the two numbers.
Step V : Display the result.
Step VI : Stop
ØØ Flowchart : Refer flowchart
ØØ Program :
.model small
.data
a dw 1234H
b dw 0100H
.code
mov ax, @data ; Initialize data section
mov ds, ax
mov ax, a ; Load number1 in ax
mov bx, b ; Load number2 in bx
sub ax, bx ; subtract numbers. Result in ax
mov ch, 04h ; Count of digits to be displayed
mov cl, 04h ; Count to roll by 4 bits
mov bx, ax ; Result in reg bx
l2: rol bx, cl ; roll bl so that msb comes to lsb
mov dl, bl ; load dl with data to be displayed
and dl, 0fH ; get only lsb
cmp dl, 09 ; check if digit is 0-9 or letter A-F
jbe l4
add dl, 07 ; if letter add 37H else only add 30H
l4: add dl, 30H
mov ah, 02 ; Function 2 under INT 21H (Display character)
int 21H
dec ch ; Decrement Count
jnz l2
mov ah, 4cH ; Terminate Program
int 21H
end
ØØ Result :
C:\programs>tasm 16-sub.asm
Turbo Assembler Version 3.0 Copyright (c) 1988, 1991 Borland International
Assembling file: 16-sub.asm
Error messages: None
Warning messages: None
Passes: 1
Remaining memory: 438k
C:\programs>tlink 16-sub.obj
Turbo Link Version 3.0 Copyright (c) 1987, 1990 Borland International
Warning: No stack
C:\programs>16-sub
1134
0 comments: