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 I : Initialize the data segment.
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
1 2 |
<span style="font-size: 14pt; font-family: 'times new roman', times, serif; color: #000000;">.model small <br/> .data <br/> op1 dd 12345678h <br/> op2 dd 11111111h <br/> ans dd ? <br/> .code <br/> mov ax, @data <br/> mov ds, ax <br/> mov ax, word ptr op1 ; lsb of number1 in ax <br/> mov bx, word ptr op1+2 ; msb of number1 in bx <br/> mov cx, word ptr op2 ; lsb of number2 in cx <br/> mov dx, word ptr op2+2 ; msb of number1 in dx <br/> sub ax, cx ; subtract lsb + lsb <br/> mov word ptr ans, ax ; lsb answer <br/> mov word ptr ans+2, bx ; msb answer <br/> mov bx, word ptr ans+2 ; Result in reg bx <br/> mov dh, 2 <br/> l1: mov ch, 04h ; Count of digits to be displayed <br/> mov cl, 04h ; Count to roll by 4 bits <br/> l2: rol bx, cl ; roll bl so that msb comes to lsb <br/> mov dl, bl ; load dl with data to be displayed <br/> and dl, 0fH ; get only lsb <br/> cmp dl, 09 ; check if digit is 0-9 or letter A-F <br/> jbe l4 <br/> add dl, 07 ; if letter add 37H else only add 30H <br/> l4: add dl, 30H <br/> mov ah, 02 ; INT 21H (Display character) <br/> int 21H <br/> dec ch ; Decrement Count <br/> jnz l2 <br/> dec dh <br/> cmp dh, 0 <br/> mov bx, word ptr ans ; display lsb of answer <br/> jnz l1 <br/> mov ah, 4ch ; Terminate Program <br/> int 21h <br/> end <br/></span> |
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.
1 |
<br/><div style="text-align: justify;"><span style="font-size: 14pt; font-family: 'times new roman', times, serif; color: #000000;">C:\programs>tasm 32sub.asm</span></div><br/><div style="text-align: justify;"><span style="font-size: 14pt; font-family: 'times new roman', times, serif; color: #000000;">Turbo Assembler Version 3.0 Copyright (c) 1988, 1991 Borland International</span></div><br/><div style="text-align: justify;"><span style="font-size: 14pt; font-family: 'times new roman', times, serif; color: #000000;">Assembling file: 32sub.asm</span></div><br/><div style="text-align: justify;"><span style="font-size: 14pt; font-family: 'times new roman', times, serif; color: #000000;">Error messages: None</span></div><br/><div style="text-align: justify;"><span style="font-size: 14pt; font-family: 'times new roman', times, serif; color: #000000;">Warning messages: None</span></div><br/><div style="text-align: justify;"><span style="font-size: 14pt; font-family: 'times new roman', times, serif; color: #000000;">Passes: 1</span></div><br/><div style="text-align: justify;"><span style="font-size: 14pt; font-family: 'times new roman', times, serif; color: #000000;">Remaining memory: 437k</span></div><br/><div style="text-align: justify;"><span style="font-size: 14pt; font-family: 'times new roman', times, serif; color: #000000;">C:\programs>tlink 32sub</span></div><br/><div style="text-align: justify;"><span style="font-size: 14pt; font-family: 'times new roman', times, serif; color: #000000;">Turbo Link Version 3.0 Copyright (c) 1987, 1990 Borland International</span></div><br/><div style="text-align: justify;"><span style="font-size: 14pt; font-family: 'times new roman', times, serif; color: #000000;">Warning: No stack</span></div><br/><div style="text-align: justify;"><span style="font-size: 14pt; font-family: 'times new roman', times, serif; color: #000000;">C:\programs>32sub</span></div><br/><div style="text-align: justify;"><span style="font-size: 14pt; font-family: 'times new roman', times, serif; color: #000000;"><b>01234567</b></span></div><br/></div><br/> |
Source projectgeek.com