Vous êtes sur la page 1sur 5

TASM Program to Add Two 8 Bit Numbers

Objective:
Write an assembly language program for 8 bit addition .
Prerequisite:
TASM assembler
Algorithm for 8 bit addition:
1) Start
2) Initialize data segment through AX register in the DS register.
3) Display the message as Enter the first number
4) Read first digit in AL register through keyboard
(e.g. AL=31h)
5) Call Input procedure to make a number from ASCII hexadecimal to a normal hexadecimal
number.AL=01h
6) Move contents of AL register to a BL. (BL AL so BL=01h)
7) Rotate the contents of BL register by 4 positions at left side. (BL=10h)
8) Read a second digit in AL register through keyboard AL=35h
9) Call Input procedure to make a number from ASCII hexadecimal to a normal hexadecimal number.
AL=05h
10) Add the contents of BL and AL store the result in BL (BLBL+AL so BL=15h)
11) Display the message as Enter the second number
12) Read first digit in AL register through keyboard
AL=32h
13) Call Input procedure to make a number from ASCII hexadecimal to a normal hexadecimal
number.AL=02h
14) Move contents of AL register to a CL. (CL AL so CL=02h)
15) Rotate the contents of CL register by 4 positions at left side. (CL=20h)
16) Read a second digit in AL register through keyboard (AL=33h)
17) Call Input procedure to make a number from ASCII hexadecimal to a normal hexadecimal number.
AL=03h
18) Add the contents of CL and AL store the result in CL (CLCL+AL so CL=23h)
(Now both numbers are accepted as 15h and 23h)
19) Add the contents of BL and CL and result gets stored in BL (E.g ADD BL,CL so BL=38h)
20) Preserve the result of addition in some temporary variable say temp from BL.
21) Mask the first nibble by AND operation with number F0h (AND BL,F0h so BL=30h)
22) Call Output procedure with BL register to make a digit back in ASCII hexadecimal range (BL=33h)
23) Move the contents of BL to DL and display it on the screen
24) Move result from temporary variable to BL again (So BL=38h)
25) Mask the second nibble by AND operation with number 0Fh (AND BL,0Fh so BL=08h)
26) Call Output procedure with BL register to make a digit back in ASCII hexadecimal range (BL=38h)
27) Move the contents of BL to DL and display it on the screen
28) Stop
Algorithm for Input procedure:(To accept input from 0 to F)
1) Compare the contents of AL with 41h.
2) Jump to step no 4 if carry flag is set(digit is in the range of 0 to 9 so add only 30h)
3) Sub 07h to AL register(If digit is in the range from A to F then add 30h and 7h both)
4) Sub 30h to AL register
5) Return
Algorithm for Output procedure:
1) Compare the contents of BL with 0Ah

2) Jump to step no 4 if carry flag is set(digit is in the range of 0 to 9 so add only 30h)
3) Add 07h to BL register(If digit is in the range from A to F then add 30h and 7h both)
4) Add 30h to BL register
5) Return
Note:
While masking F or f is not case sensitive. But in input procedure 41h number is considered for
comparison because 41h is ASCII hex value for A. In output procedure 0A is considered not a is
considered as small case a has 61h ASCII hex value.So this input and output procedure are applicable
for only capital A to F
TASM Program :
Data segment
msg db 0dh,0ah,"Enter first number: $"
msg1 db 0dh,0ah,"Enter second number: $"
result db 0dh,0ah,"The Result is: $"
Data ends
Code segment
assume CS:Code,DS:Data
start:
mov ax,Data ; Move Data to Data Segment add8
mov DS,ax
mov dx,offset msg ; Display contents of variable msg
mov ah,09h
int 21h
mov ah,01h ; To accept input and store ASCII value into al
int 21h
sub al,30h ; Accept 10's place of the Number
mov bl,al
rol bl,4
mov ah,01h ; To accept input and store ASCII value into al
int 21h
sub al,30h ; Accept unit's place of Number
add bl,al ; Get the number by adding 10's and unit's place
mov dx,offset msg1 ; Display contents of variable msg1
mov ah,09h
int 21h
mov ah,01h ; To accept input and store ASCII value into al
int 21h
sub al,30h ; Accept 10's place of the Number
mov cl,al
rol cl,4
mov ah,01h ; To accept input and store ASCII value into al

int 21h
sub al,30h ; Accept unit's place of Number
add cl,al ; Get the number by adding 10's and unit's place
add bl,cl ; Add the two accepted Number's
mov dx,offset result ; Display contents of string result
mov ah,09h
int 21h
mov cl,bl ; Store the value of the Result
and bl,0f0h ; Isolate 10's place of Result
ror bl,4
call AsciiConv ; Convert to ASCII to display
mov dl,bl ; Display a Number/Alphabet
mov ah,02h
int 21h
mov bl,cl ; Retrieve original Result
and bl,0fh ; Isolate unit's place of Result
call AsciiConv ; Convert to ASCII to display
mov dl,bl ; Display a Number/Alphabet
mov ah,02h
int 21h
mov ah,4ch ; Terminate the program
int 21h
AsciiConv proc ; Compare to 0a if it is less than A then we need to add only
30
cmp bl,0ah ; If it is greater than or equal to 0a then we also need to add
07
jc skip
add bl,07h
skip: add bl,30h
ret
endp
Code ends
end start

output:C:\TASM\BIN>tasm add8.asm
Turbo Assembler Version 4.1
Assembling file:
Error messages:
Warning messages:
Passes:
Remaining memory:

add8.asm
None
None
1
453k

Copyright (c) 1988, 1996 Borland International

C:\TASM\BIN>tlink add8.obj
Turbo Link Version 7.1.30.1. Copyright (c) 1987, 1996 Borland International
Warning: No stack
C:\TASM\BIN>add8
Enter first number: 13
Enter second number: 12
The Result is: 25

8086 Assembly Language Program 16 Bit Addition

DATA SEGMENT
NUM DW 1234H, 0F234H
SUM DW 2 DUP(0)
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AX,NUM ; First number loaded into AX
MOV BX,0H ; For carry BX register is cleared
ADD AX,NUM+2 ; Second number added with AX
JNC DOWN ; Check for carry
INC BX ; If carry generated increment the BX
DOWN: MOV SUM,AX ; Storing the sum value
MOV SUM+2,BX ; Storing the carry value
MOV AH,4CH
INT 21H
CODE ENDS

END START

INPUT : 1234H, F234H


OUTPUT : 10468H

Vous aimerez peut-être aussi