8086 Assembly Program for Subtraction of Two 8 bit Numbers

Subtraction is a fundamental arithmetic operation in assembly language programming. This blog post explores an 8086 assembly language program that performs the subtraction of two 8-bit numbers using the SUB instruction. The result is stored in a 16-bit destination.

data segment
a db 2Ah
b db 13h
c dw ?
data ends

code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov al,a
mov bl,b
sub al,bl
mov c,ax
int 3
code ends
end start

Step-by-Step Explanation

1. Data Segment Initialization

  • a db 2Ah stores the first operand (42 in decimal) as an 8-bit value.
  • b db 13h stores the second operand (19 in decimal) as an 8-bit value.
  • c dw ? reserves a word (16-bit) for storing the result.

2. Code Execution Flow

  • mov ax, data and mov ds, ax: Initialize the data segment by loading its address into the AX register and moving it to DS.
  • mov al, a: Load the first operand into AL.
  • mov bl, b: Load the second operand into BL.
  • sub al, bl: Perform the subtraction of AL by BL, storing the result in AL.
  • mov c, ax: Store the result in variable c.
  • int 3: Generates a breakpoint interrupt to terminate the program execution.

Flowchart:

Overall Process

  • The program initializes registers and sets up pointers to the data segment.
  • It loads the operands into appropriate registers.
  • The SUB instruction is executed to perform the subtraction, storing the result in AL.
  • The result is stored in the destination variable.
  • The program terminates after executing the subtraction operation.

Output

C:\TASM>masm an8sub.asm
Microsoft (R) Macro Assembler Version 5.00
Copyright (C) Microsoft Corp 1981-1985, 1987.  All rights reserved.
 
Object filename [an8sub.OBJ]:
Source listing  [NUL.LST]:
Cross-reference [NUL.CRF]:
 
  50402 + 450254 Bytes symbol space free
 
      0 Warning Errors
      0 Severe  Errors
 
C:\TASM>link an8sub.obj
 
Microsoft (R) Overlay Linker  Version 3.60
Copyright (C) Microsoft Corp 1983-1987.  All rights reserved.
 
Run File [AN8SUB.EXE]:
List File [NUL.MAP]:
Libraries [.LIB]:
LINK : warning L4021: no stack segment
 
C:\TASM>debug an8sub.exe
-g
 
AX=0B17  BX=0013  CX=0022  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B97  ES=0B87  SS=0B97  CS=0B98  IP=0011   NV UP EI PL NZ NA PE NC
0B98:0011 CC            INT     3
-d 0B97:0000
0B97:0000  2A 13 17 0B 00 00 00 00-00 00 00 00 00 00 00 00   *...............
0B97:0010  B8 97 0B 8E D8 A0 00 00-8A 1E 01 00 2A C3 A3 02   ............*...
0B97:0020  00 CC 86 72 FF 77 15 8A-86 70 FF 2A E4 50 B8 FD   ...r.w...p.*.P..
0B97:0030  05 50 FF 36 24 21 E8 77-63 83 C4 06 FF 36 24 21   .P.6$!.wc....6$!
0B97:0040  B8 0A 00 50 E8 47 5E 83-C4 04 5E 8B E5 5D C3 90   ...P.G^...^..]..
0B97:0050  55 8B EC 81 EC 84 00 C4-5E 04 26 80 7F 0A 00 74   U.......^.&....t
0B97:0060  3E 8B 46 08 8B 56 0A 89-46 FC 89 56 FE C4 5E FC   >.F..V..F..V..^.
0B97:0070  26 8A 47 0C 2A E4 40 50-8B C3 05 0C 00 52 50 E8   &.G.*[email protected].
-q
 
C:\TASM>

Understanding the Memory Dump

Memory AddressValue (Hex)Binary RepresentationDecimal EquivalentExplanation
0B97:00002A 130010 1010 0001 001142, 19Input values a = 42, b = 19
0B97:0002170001 011123Result of 42 - 19 = 23

Summary of Output:

  • The original numbers 2Ah (42 in decimal) and 13h (19 in decimal) are processed.
  • The subtraction operation computes 42 - 19 = 23, which is stored in c.
  • The final result stored in memory is 17h (23 in decimal).

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.