8086 program to subtract two 8 bit BCD numbers

Problem – Write a program in 8086 microprocessor to find out the Subtraction of two 8-bit BCD numbers, where numbers are stored from starting memory address 2000 : 500 and store the result into memory address 2000 : 600 and carry (borrow) at 2000 : 601.

Example –



Algorithm –

  1. Load data from offset 500 to register AL (first number)
  2. Load data from offset 501 to register BL (second number)
  3. Subtract these two numbers (contents of register AL and register BL)
  4. Apply DAS instruction (decimal adjust)
  5. Store the result (content of register AL) to offset 600
  6. Set register AL to 00
  7. Add contents of register AL to itself with carry (borrow)
  8. Store the result (content of register AL) to offset 601
  9. Stop

Program –

MEMORY ADDRESS MNEMONICS COMMENT
400 MOV AL, [500] AL<-[500]
404 MOV BL, [501] BL<-[501]
408 SUB AL, BL AL<-AL-BL
40A DAS DECIMAL ADJUST AL
40B MOV [600], AL AL->[600]
40F MOV AL, 00 AL<-00
411 ADC AL, AL AL<-AL+AL+cy(prev)
413 MOV [601], AL AL->[601]
417 HLT END

Explanation –

  1. MOV AL, [500] load data from offset 500 to register AL.
  2. MOV BL, [501] load data from offset 501 to register BL.
  3. SUB AL, BL subtract contents of registers AL AND BL.
  4. DAS decimal adjust AL.
  5. MOV [600], AL store data from register AL to offset 600.
  6. MOV AL, 00 set value of register AL to 00.
  7. ADC AL, AL add contents of register AL to AL with borrow.
  8. MOV [601], AL store data from register AL to offset 601.
  9. HLT End.


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

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.