Home »
Embedded Systems
Subtract Two 16-bits numbers | 8086 Microprocessor
In this tutorial, we will learn how to find the subtraction of two 16-bits numbers using 8086 Microprocessor?
By Ayush Sharma Last updated : May 22, 2023
Problem Statement
Write a program to subtract two 16-bit numbers where starting address is 2000 and the numbers are at 3000 and 3002 memory address and store result into 3004 and 3006 memory address.
Algorithm
- Load 0000H into CX register (for borrow)
- Load the data into AX(accumulator) from memory 3000
- Load the data into BX register from memory 3002
- Subtract BX with Accumulator AX
- Jump if no borrow
- Increment CX by 1
- Move data from AX(accumulator) to memory 3004
- Move data from CX register to memory 3006
- Stop
Program
ADDRESS | MNEMONICS | OPERANDS | COMMENTS |
2000 | MOV | CX, 0000 | [CX] <- 0000 |
2003 | MOV | AX, [3000] | [AX] <- [3000] |
2007 | MOV | BX, [3002] | [BX] <- [3002] |
200B | SUB | AX, BX | [AX] <- [AX] – [BX] |
200D | JNC | 2010 | Jump if no borrow |
200F | INC | CX | [CX] <- [CX] + 1 |
2010 | MOV | [3004], AX | [3004] <- [AX] |
2014 | MOV | [3006], CX | [3006] <- [CX] |
2018 | HLT | | Stop |
Explanation
- MOV is used to load and store data.
- SUB is used to subtract two numbers where their one number is in accumulator or not.
- JNC is a 2-bit command which is used to check whether the borrow is generated from accumulator or not.
- INC is used to increment an register by 1.
- HLT is used to stop the program.
- AX is an accumulator which is used to load and store the data.
- BX, CX is general purpose registers where BX is used for storing second number and CX is used to store borrow.