;Program to subtract two 8 bit numbers
;Author Name: Mr. Sandip S. Hire
;Roll no:101318
MESSAGE MACRO msg ;Printing message
mov ah,09h
lea dx,msg
int 21h
ENDM
.model small
.stack 100h
.data
msg db 10,13,"The subtraction is: $"
num db 0FFh
num2 db 0AAh
temp db 0
.code
start:mov ax,@data ;Initializing DS
mov ds,ax
MESSAGE msg
mov al,num ;subtracting 8 bit operands
sub al,num2
mov temp,al
jnc forw
mov dl,31h ;Print 1 if CF=1
mov ah,02h
int 21h
forw:
call DISPLAY
mov ah,4ch ; return back to DOS
int 21h
DISPLAY PROC
mov al,temp ;FE
mov cl,04
rol al,cl ;EF
and al,0Fh ;0F
cmp al,9
jbe next
add al,07h
next:add al,30h
mov dl,al ;Print F
mov ah,02h
int 21h
mov al,temp ;FE
and al,0FH ;0E
cmp al,9
jbe next1
add al,07h
next1:add al,30h
mov dl,al ;Print E
mov ah,02h
int 21h
ret
DISPLAY ENDP
end start
[8]
;Program for 16 bit subtraction
;Author:Mr.Sandip S. Hire
;Roll_no 101318
.model small
.stack 100h
.data
msg db 10,13,"Substraction Is:","$"
count db 4
num1 dw 0FFFFh
num2 dw 0AAAAh
result dw 0
.code
start:
mov ax,@data ; Initialize DS
mov ds,ax
mov ah,09h ; Printing msg
lea dx,msg
int 21h
mov ax,[num1] ; ax=num1
sub ax,[num2] ; ax=ax+num2
mov result,ax
jnc next
mov dl,31h ;out 1 if CF=1
mov ah,02h
int 21h
next:
call DISPLAY
mov ah,4ch ;return back DOS
int 21h
DISPLAY PROC
loop1: mov cl,4
rol result,cl
mov dx,result
and dl,0fh ;Mask upper nibble to dl register
cmp dl,09h
jbe loop2
add dl,07h
loop2:
add dl,30h
mov ah,02h
int 21h
dec byte ptr [count]
jnz loop1
ret
DISPLAY endp
end start
[9]
;Program to perform 8bit Multiplication
;Author name:Mr. Sandip S. Hire
;Roll_no:101318
PRINT MACRO msg
mov ah,09h ;Printing message
lea dx,msg
int 21h
ENDM
.model small
.stack 256
.data
msg db 10,13,"The result of multiplication: $"
data1 db 0FFh
data2 db 0FFh
result dw 0
count db 4
.code
start:mov ax,@data ;Initializing data segment
mov ds,ax
PRINT msg
mov al,data1 ;adding operands
mul data2
mov result,ax
call DISPLAY
mov ah,4ch ;return to DOS
int 21h
DISPLAY PROC
loop1: mov cl,4
rol result,cl
mov dx,result
and dl,0fh ;Mask upper nibble to dl register
cmp dl,09h
jbe loop2
add dl,07h
loop2:
add dl,30h
mov ah,02h
int 21h
dec byte ptr [count]
jnz loop1
ret
DISPLAY endp
end start ;end of Program
[10]
;Program for 16 bit multiplication
;Author:Mr. Sandip S. Hire
;Roll_no 101318
.model small
.stack 100h
.data
msg db 10,13,"Multiplication Is:","$"
count db 4
num1 dw 0FFFFh
num2 dw 0AAAAh
result dw 0
result1 dw 0
.code
start:
mov ax,@data ; Initialize DS
mov ds,ax
mov ah,09h ; Printing msg
lea dx,msg
int 21h
mov ax,[num1] ; ax=num1
mul [num2] ; ax=ax*num2
mov result,dx
mov result1,ax
call DISPLAY
mov ax,result1
mov result,ax
mov [count],4
call DISPLAY
mov ah,4ch ;return back DOS
int 21h
DISPLAY PROC
loop1: mov cl,4
rol result,cl
mov dx,result
and dl,0fh ;Mask upper nibble to dl register
cmp dl,09h
jbe loop2
add dl,07h
loop2:
add dl,30h
mov ah,02h
int 21h
dec byte ptr [count]
jnz loop1
ret
DISPLAY endp
end start
[11]
;Program to perform 8 bit division
;Author name:Mr.Sandip S. Hire
;Roll_no:101318
PRINT MACRO msg
mov ah,09h ;Printing message
lea dx,msg
int 21h
ENDM
.model small
.stack 256
.data
msg db 10,13,"The quotient of division is: $"
msg1 db 10,13,"Remainder is: $"
data1 db 15h
data2 db 05h
result db 0
rem db 0
.code
start:mov ax,@data ;Initializing data segment
mov ds,ax
PRINT msg
mov al,data1 ;adding operands
mov ah,00h
div data2
mov result,al
mov rem,ah
call DISPLAY
PRINT msg1
mov al,rem
mov result,al
call DISPLAY
mov ah,4ch ;return to DOS
int 21h
DISPLAY PROC
mov al,result
and al,0F0h ; Displaying the first
mov cl,04 ; digit of result
rol al,cl
cmp al,09
jbe next ;jump below equal next
add al,07h
next:add al,30h
mov dl,al
mov ah,02h
int 21h
mov al,result ;Displaying the second
and al,0FH ;digit of result
cmp al,09
jbe next1
add al,07h
next1:add al,30h
mov dl,al
mov ah,02h
int 21h
ret
DISPLAY ENDP
end start ;end of Program
[12]
;program for 16 bit division
;Author:Mr.Sandip S. Hire
;Roll_no 101318
.model small
.stack 100h
MESSAGE MACRO msg
mov ah,09h ; Printing msg
lea dx,msg
int 21h
endm
.data
msg db 10,13,"Division Is:","$"
msg1 db 10,13,"Reminder is:","$"
count db 4
num1 dw 0FFFFh
num2 dw 05555h
quo dw 0
rem dw 0
result dw 0
.code
start:
mov ax,@data ; Initialize DS
mov ds,ax
MESSAGE msg
mov dx,00h
mov ax,[num1] ; ax=num1
div [num2] ; ax=ax*num2
mov rem,dx
mov quo,ax
mov ax,quo
mov result,ax
call DISPLAY
MESSAGE msg1
mov ax,rem
mov result,ax
mov [count],4
call DISPLAY
mov ah,4ch ;return back DOS
int 21h
DISPLAY PROC
loop1: mov cl,4
rol result,cl
mov dx,result
and dl,0fh ;Mask upper nibble to dl register
cmp dl,09h
jbe loop2
add dl,07h
loop2:
add dl,30h
mov ah,02h
int 21h
dec byte ptr [count]
jnz loop1
ret
DISPLAY endp
end start
[13]
;Program to find even and odd number(0-9)
;Author Name: Mr. Sandip S. Hire
;Roll No : 101318
PRINT MACRO msg
lea dx,msg
mov ah,09h
int 21h
Endm
.model small
.stack 100h
.data
Inputmsg db 10,13,"Enter your number:-$"
Evenmsg db 10,13,"Your number is Even...$"
Oddmsg db 10,13,"Your number is Odd...$"
.code
start: mov ax,@data
mov ds,ax
PRINT Inputmsg
mov ah,01 ;Enter (0-9)
int 21h
and al,0Fh
rcr al,1
jc Oddno
PRINT Evenmsg
jmp skip
Oddno:PRINT Oddmsg
skip:mov ah,4ch
int 21h
end start
[14]
;Problem definition: -Program to check whether number is EVEN or ODD (00-FF)
;Author Name: - Mr. Sandip S. Hire
;Roll No:- 101318
MESSEGE MACRO msg
mov ah,09h
lea dx,msg
int 21h
ENDM
.model small
.stack 100h
.data
msg db 10,13,"Enter your Number: $"
evenno db 10,13,"Number is Even....$"
oddno db 10,13,"Number is Odd......$"
temp db ?
.code
start:
mov ax,@data
mov ds,ax
MESSEGE msg
call INPUT
mov al,temp
mov ah,00
mov bl,02
div bl
cmp ah,00
je even1
MESSEGE oddno
jmp skip
even1:MESSEGE evenno
skip:mov ah,4ch
int 21h
INPUT PROC NEAR
mov ah,01h
int 21h
cmp al,39h
jbe next2
sub al,07h
next2:sub al,30h
mov temp,al
mov cl,04h
rol temp,cl
mov ah,01h
int 21h
cmp al,39h
jbe next3
sub al,07h
next3:sub al,30h
add temp,al
ret
INPUT ENDP
end start
[15]
;Program to find average of n numbers
;Author Name: Mr. Sandip S. Hire
;Roll No : 101318
.model small
.stack 100
.data
msg db 10,13,"Average of Numbers is:-$"
array db 10H,11H,12H,13H,14H
array_len db 5
result db 0
.code
start: org 100H
mov ax,@data
mov ds,ax
lea dx,msg
mov ah,09h
int 21h
mov cl,array_len
lea si,array
xor ax,ax
back: adc al,[si]
inc si
dec cl
jnz back
mov bl,array_len
mov ah,00h
div bl
mov result,al
call DISPLAY
mov ah,4ch
int 21h
DISPLAY PROC
mov al,result
and al,0F0h ; Displaying the first
mov cl,04 ; digit of result
rol al,cl
cmp al,09
jbe next ;jump below equal next
add al,07h
next:add al,30h
mov dl,al
mov ah,02h
int 21h
mov al,result ;Displaying the second
and al,0FH ;digit of result
cmp al,09
jbe next1
add al,07h
next1:add al,30h
mov dl,al
mov ah,02h
int 21h
ret
DISPLAY ENDP
end start
[16]
;Program to count number of positive and negative numbers
;Author Name:Mr.Sandip S.Hire
;Roll No:101318
PRINTMSG MACRO msg
mov ah,09h
lea dx,msg
int 21h
ENDM
.model small
.stack 100h
.data
msg1 db 10,13,"Number of positive numbers are: $"
msg2 db 10,13,"Number of negative numbers are: $"
array db 80h,20h,90h,40h,0FFh
count db 05
negcount db 0
poscount db 0
.code
start:
mov ax,@data
mov ds,ax
mov si,OFFSET array
mov bh,00 ; positive count
mov bl,00 ; negative count
back:
mov al,[si]
add al,00
js neg1 ;if SF=1 number is negative
inc bh ;increment count of positive no.
jmp skip
neg1: inc bl ;increment count of negative no.
skip: inc si
dec byte ptr [count]
jnz back
add bx,3030h
mov poscount,bh
mov negcount,bl
PRINTMSG msg1
mov dl,poscount
mov ah,02
int 21h
PRINTMSG msg2
mov dl,negcount
mov ah,02
int 21h
mov ah,4ch
int 21h
end start
[17]
;Program to add digits of a 3-digit number
;Author Name: Mr.Sandip S. Hire
;Id:101318 Date: 10/3/2017
PRINT MACRO msg
mov ah,09h
mov dx,OFFSET msg
int 21h
Endm
.model small
.stack 100
.data
msg db 10,13,"Enter any 3-digit number(0-9):","$"
msg1 db 10,13,"Sum of digits is: ","$"
count db 3
sum db 1 DUP(0)
.code
start: mov ax,@data
mov ds,ax
PRINT msg
back:mov ah,01h
int 21h
sub al,30h
add al,[sum]
daa
mov [sum],al
dec byte ptr [count]
jnz back
PRINT msg1
call DISPLAY
mov ah,4ch
int 21h
DISPLAY PROC NEAR
mov al,sum
mov cl,04
rol al,cl
and al,0Fh
cmp al,9
jbe next
add al,07h
next:add al,30h
mov dl,al
mov ah,02h
int 21h
mov al,sum
and al,0FH
cmp al,9
jbe next1
add al,07h
next1:add al,30h
mov dl,al
mov ah,02h
int 21h
ret
DISPLAY Endp
end start
[18]
;PROGRAM TO PERFORM CONVERSION FROM TWO ASCII NUMBERS TO PACKED ;BCD
;AUTHOR NAME: MR.SANDIP S. HIRE
;DATE: 10/3/2017
.model small
.stack 100
.data
msg1 db 10,13,"The Packed BCD Number is: ","$"
Num1 db 35H
Num2 db 39H
PackBcd db 0
.code
start:
mov ax,@data
mov ds,ax
mov al,Num1
mov bl,Num2
and al,0Fh ;05
and bl,0Fh ;09
mov cl,04
rol al,cl ;50
or al,bl ;59
mov ah,4ch
int 21h
end start
[19]
comment !
Program to find largest number from the array containing 15 elements
Author Name: Mr. Sandip S. Hire
Id: 101318
!
.model small
.stack 100h
.data
ArraySet db 09h,04h,15h,18h,16h,11h,05h,20h,02h,01h
ArrayLen dw 0AH
largest db ?
.code
start: org 100h
mov ax,@data
mov ds,ax
mov cx,ArrayLen
mov bl,00h
mov si,OFFSET ArraySet
back:mov al,[si]
cmp al,bl
jc next
mov bl,al
next:inc si
loop back
mov largest,bl
mov ah,4ch
int 21h
end start
[20]
COMMENT %
PROGRAM TO EXCHANGE BLOCK OF DATA CONTAINING 10 ELEMENTS
FROM ONE MEMORY LOCATION TO ANOTHER
Author Name: Mr. Sandip S. Hire
Roll : 101318
%
.model small
.stack 100h
.data
src_array db 10h,11h,12h,13h,14h,15h
dest_array db 5 DUP(0)
.code
start: org 100h
mov ax,@data
mov ds,ax
mov cx,05
mov si,OFFSET src_array
mov di,OFFSET dest_array
back:mov al,[si]
mov [di],al
inc si
inc di
loop back
mov ah,4ch
int 21h
end start
[21]
; Program to demonstrate AAM instruction
; Author Name: Mr. Sandip S. Hire
; Roll : 101318
.model small
.stack 100h
.data
res dw 0
.code
start:
mov ax,@data
mov ds,ax
xor ah,ah
mov al,9
mov bl,5
mul bl
aam
or ax,3030h
mov [res],ax
mov dl,ah
mov ah,02h
int 21h
mov dx,res
mov ah,02h
int 21h
mov ah,4ch
int 21h
end start