8086 program to subtract two 16-bit numbers with or without borrow
Problem – 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.
- 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
|2000||MOV||CX, 0000||[CX] <- 0000|
|2003||MOV||AX, ||[AX] <- |
|2007||MOV||BX, ||[BX] <- |
|200B||SUB||AX, BX||[AX] <- [AX] – [BX]|
|200D||JNC||2010||Jump if no borrow|
|200F||INC||CX||[CX] <- [CX] + 1|
|2010||MOV||, AX|| <- [AX]|
|2014||MOV||, CX|| <- [CX]|
- 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 are general purpose registers where BX is used for storing second number and CX is used to store borrow.
Attention reader! Don’t stop learning now. Get hold of all the important CS Theory concepts for SDE interviews with the CS Theory Course at a student-friendly price and become industry ready.