Open In App

8086 program to subtract two 16 bit BCD numbers

Last Updated : 31 May, 2018
Improve
Improve
Like Article
Like
Save
Share
Report

Prerequisite – 8086 program to subtract two 8 bit BCD numbers
Problem – Write a program in 8086 microprocessor to find out the subtraction of two 16-bit BCD numbers, where numbers are stored from starting offset 500 and store the result into offset 600.

Example –

Algorithm –

  1. Load data from offset 500 to register AL
  2. Load data from offset 502 to register BL
  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. Load data from offset 501 to register AL
  7. Load data from offset 503 to register BL
  8. Subtract these two numbers with borrow.(contents of register AL and register BL)
  9. Apply DAS instruction (decimal adjust)
  10. Store the result (content of register AL) to offset 601
  11. Set register AL to 00
  12. Add contents of register AL to itself with carry
  13. Store the result (content of register AL) to offset 602
  14. Stop

Program –

MEMORY ADDRESS MNEMONICS COMMENT
400 MOV AL, [500] AL<-[500]
404 MOV BL, [502] BL<-[502]
408 SUB AL, BL AL<-AL-BL
40A DAS decimal adjust
40B MOV [600], AL AL->[600]
40F MOV AL, [501] AL<-[501]
413 MOV BL, [503] BL<-[503[
417 SBB AL, BL AL<-AL-BL-borrow
419 DAS decimal adjust
41A MOV [601], AL AL->[601]
41E MOV AL, 00 AL<-00
420 ADC AL, AL AL<-AL+AL+borrow
422 MOV [602], AL A->[602]
426 HLT End

Explanation –

  1. MOV AL, [500]: load data from offset 500 to register AL
  2. MOV BL, [502]: load data from offset 502 to register BL
  3. SUB AL, BL: subtract contents of registers AL AND BL
  4. DAS: decimal adjust
  5. MOV [600], AL: store data from register AL to offset 600
  6. MOV AL, [501]: load data from offset 501 to register AL
  7. MOV BL, [503]: load data from offset 503 to register BL
  8. SBB AL, BL: subtract contents of registers AL AND BL with borrow
  9. DAS: decimal adjust
  10. MOV [601], AL: store data from register AL to offset 601
  11. MOV AL, 00: set value of register AL to 00
  12. ADC AL, AL: add contents of register AL to AL with carry
  13. MOV [601], AL: store data from register AL to offset 601
  14. HLT: end

Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads