# 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.

**Example –**

**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 –**

Memory | Mnemonics | Operands | Comment |
---|---|---|---|

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**are general purpose registers where BX is used for storing second number and CX is used to store borrow.

Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.

## Recommended Posts:

- 8085 program to subtract two 16-bit numbers with or without borrow
- 8085 program to subtract two 8-bit numbers with or without borrow
- 8086 program to subtract two 8 bit BCD numbers
- 8086 program to subtract two 16 bit BCD numbers
- 8086 program to determine cubes of numbers in an array of n numbers
- 8086 program to determine squares of numbers in an array of n numbers
- 8086 program to add two 8 bit BCD numbers
- 8086 program to add two 16 bit BCD numbers with carry
- 8086 program to multiply two 16-bit numbers
- 8086 program to add two 16-bit numbers with or without carry
- 8086 program to multiply two 8 bit numbers
- 8086 program to generate G.P. series of n numbers
- 8086 program to generate AP series of n numbers
- 8086 program to find sum of Even numbers in a given series
- 8086 program to find average of n numbers
- 8086 program to find GCD of two numbers and print the GCD
- 8086 program to find sum of odd numbers in a given series
- 8086 program to determine largest number in an array of n numbers
- 8086 program to print a String
- 8086 program to find the min value in a given array

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.