Algorithm for Subtract Two 32 Bit Numbers
- We have 32 bit numbers. Initially we will load the first 32 bit number into the registers AX and BX.
- AX contains the LSB while BX contains the MSB of the number.
- Loading is done using the MOV instruction.
- Now we will load the second 32 bit number into the registers CX and DX. CX contains the LSB and DX contains the MSB of the number.
- Initially, we will subtract the LSBs i.e. to subtract the contents of CX with contents of AX. The subtraction is done using SUB instruction.
- The result of LSB subtraction is stored in AX.
- Now, we will subtract the MSB alongwith borrow if any generated in the LSB subtraction i.e. we are subtracting DX from BX using SBB (subtract with borrow) instruction.
- The result of MSB subtraction is in register BX.
- Display the result using display routine.
For example : | BX : AX = 12345678 H | 12345678 H | |
DX : CX = 11111111 H | – | 11111111 H | |
01234567 H |
Algorithm to Subtract Two 32 Bit Numbers
Step II : Load the LSB of first number into AX register.
Step III : Load the MSB of first number into BX register.
Step IV : Load the LSB of the second number into CX register.
Step V : Load the MSB of the second number into DX register.
Step VI : Subtract the two LSBs.
Step VII : Subtract the two MSBs along with borrow.
Step VIII : Display the result.
Step IX : Stop.
Program to Subtract Two 32 Bit Numbers
.model small
.data
op1 dd 12345678h
op2 dd 11111111h
ans dd ?
.code
mov ax, @data
mov ds, ax
mov ax, word ptr op1 ; lsb of number1 in ax
mov bx, word ptr op1+2 ; msb of number1 in bx
mov cx, word ptr op2 ; lsb of number2 in cx
mov dx, word ptr op2+2 ; msb of number1 in dx
sub ax, cx ; subtract lsb + lsb
mov word ptr ans, ax ; lsb answer
mov word ptr ans+2, bx ; msb answer
mov bx, word ptr ans+2 ; Result in reg bx
mov dh, 2
l1: mov ch, 04h ; Count of digits to be displayed
mov cl, 04h ; Count to roll by 4 bits
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 ; INT 21H (Display character)
int 21H
dec ch ; Decrement Count
jnz l2
dec dh
cmp dh, 0
mov bx, word ptr ans ; display lsb of answer
jnz l1
mov ah, 4ch ; Terminate Program
int 21h
end
How to Run this Program
For Running this program you should have installed Tasm on you computer . If you have not installed Tasm yet please install from Here .
For more project on assembly language programs or codes.
C:\programs>tasm 32sub.asmTurbo Assembler Version 3.0 Copyright (c) 1988, 1991 Borland InternationalAssembling file: 32sub.asmError messages: NoneWarning messages: NonePasses: 1Remaining memory: 437kC:\programs>tlink 32subTurbo Link Version 3.0 Copyright (c) 1987, 1990 Borland InternationalWarning: No stackC:\programs>32sub01234567