Post on 28-Jan-2021
Name : RAJESH MMicroprocessor and Interfacing
8086 Experiments
1. Addition of two 8bit numbers
Code
DATA SEGMENT
VAR1 DB 85H
VAR2 DB 32H
RES DB ?
DATA ENDS
ASSUME CS:CODE,DS:DATA
CODE SEGMENT
START: MOV AX,DATA
MOV DS,AX
MOV AL,VAR1
MOV BL,VAR2
ADD AL,BL
MOV RES,AL
MOV AH,4CH
INT 21H
CODE ENDS
END START
Table
Instruction
Memory Address
HEX Code
VAR1 DB 85H
0710:0000
85
VAR2 DB 32H
0710:0001
32
RES DB ?
0710:0002
B7
DATA ENDS
0710:0002
B7
ASSUME CS:CODE,DS:DATA
0710:0002
B7
CODE SEGMENT
0710:0002
B7
START: MOV AX,DATA
0711:0000
B8 10 07
MOV DS,AX
0711:0003
8E D8
MOV AL,VAR1
0711:0005
A0 00 00
MOV BL,VAR2
0711:0008
8A 1E 01 00
ADD AL,BL
0711:000C
02 C3
MOV RES,AL
0711:000E
A2 02
Output
2. Addition of two 8bit numbers
Code
DATA SEGMENT
VAR1 DB 53H
VAR2 DB 2AH
RES DB ?
DATA ENDS
ASSUME CS:CODE,DS:DATA
CODE SEGMENT
START: MOV AX,DATA
MOV DS,AX
MOV AL,VAR1
MOV BL,VAR2
SUB AL,BL
MOV RES,AL
MOV AH,4CH
INT 21H
CODE ENDS
END START
Table
Instruction
Memory Address
HEX Code
VAR1 DB 53H
0710:0000
53
VAR2 DB 2AH
0710:0001
2A
RES DB ?
0710:0002
00
DATA ENDS
0710:0002
00
ASSUME CS:CODE,DS:DATA
0710:0002
00
CODE SEGMENT
0710:0002
00
START: MOV AX,DATA
0711:0000
B8 10 07
MOV DS,AX
0711:0003
8E D8
MOV AL,VAR1
0711:0005
A0 00 00
MOV BL,VAR2
0711:0008
8A 1E 01 00
SUB AL,BL
0711:000C
2A C3
MOV RES,AL
0711:000E
A2 02
MOV AH,4CH
0711:0011
B4 4C
INT 21H
0711:0013
CD 21
CODE ENDS
0711:0013
CD 21
END START
0711:0013
CD 21
Output
3. Multiplication of two 8bit numbers
Code
DATA SEGMENT
VAR1 DB 0EDH
VAR2 DB 99H
RES DW ?
DATA ENDS
ASSUME CS:CODE,DS:DATA
CODE SEGMENT
START: MOV AX,DATA
MOV DS,AX
MOV AL,VAR1
MOV BL,VAR2
MUL BL
MOV RES,AX
MOV AH,4CH
INT 21H
CODE ENDS
END START
Table
Instruction
Memory Address
HEX Code
VAR1 DB 0EDH
0710:0000
ED
VAR2 DB 99H
0710:0001
99
RES DW ?
0710:0002
A5 8D
DATA ENDS
0710:0002
A5 8D
ASSUME CS:CODE,DS:DATA
0710:0002
A5 8D
CODE SEGMENT
0710:0002
A5 8D
START: MOV AX,DATA
0711:0000
B8 10 07
MOV DS,AX
0711:0003
8E D8
MOV AL,VAR1
0711:0005
A0 00 00
MOV BL,VAR2
0711:0008
8A 1E 01 00
MUL BL
0711:000C
F6 E3
MOV RES,AX
0711:000E
A3 02
MOV AH,4CH
0712:0001
B4 4C
INT 21H
0712:0003
CD 21
Output
4. Division of two 8bit numbers
Code
.model small
.data
a dw 000FH b db 08H
.code
mov ax, @data ; Initialize data section mov ds, ax
mov ax, a ; Load number1 in ax mov bl, b ; Load number2 in bl
div bl ; divide numbers. Quotient in al and Rem in ah mov ch, 04h
; Count of digits to be displayed
mov cl, 04h ; Count to roll by 4 bits
mov bx, ax ; Result in reg bh
l2: rol bx, cl ; roll bl so that msb comes to lsb mov dl, bl ;
load dl with data to be displayed and dl, 0fH ; get only lsb
cmp dl, 09 ; check if digit is 0-9 or letter A-F jbe l4
add dl, 07 ; if letter add 37H else only add 30H l4: add dl, 30H
mov ah, 02 ; Function 2 under INT 21H (Display character) int 21H
dec ch ; Decrement Count jnz l2
mov ah, 4cH ; Terminate Program int 21H
end
Table
mov ax, @data
0711:0000
B8 10 07
mov ds, ax
0711:0003
8E D8
mov ax, a
0711:0005
A1 00 00
mov bl, b
0711:0008
8A 1E 02 00
div bl
0711:000C
F6 F3
mov ch, 04h
0711:000E
B5 04
mov cl, 04h
0711:0010
B1 04
mov bx, ax
0711:0012
8B D8
rol bx, cl
0711:0014
D3 C3
mov dl, bl
0711:0016
8A D3
and dl, 0fH
0711:0018
80 E2 0F
cmp dl, 09
0711:001B
80 FA 09
jbe l4
0711:000C
76 03
add dl, 07
0711:0020
80 C2 07
add dl, 30H
0711:0023
80 C2 30
mov ah, 02
0711:0026
B4 02
int 21H
0711:0028
CD 21
dec ch
0711:002A
FE CD
jnz l2
0711:002C
75 E6
Output
5. Addition of two 16bit numbers
Code
.model small
.data
a db " Enter the first number $"
b db " Enter the second number $"
c db " The sum is : $"
d db 00h
.code
start:
mov ax,@data
mov ds,ax
mov dx,offset a
mov ah,09h
int 21h
mov ah,01h
int 21h
mov bh,al
mov ah,01h
int 21h
mov bl,al
mov dx,offset b
mov ah,09h
int 21h
mov ah,01h
int 21h
mov ch,al
mov ah,01h
int 21h
mov cl,al
add al,bl
mov ah,00h
aaa
add bh,ah
add bh,ch
mov d,al
mov al,bh
mov ah,00h
aaa
mov bx,ax
add bx,3030h
mov dx,offset c
mov ah,09h
int 21h
mov dl,bh
mov ah,02h
int 21h
mov dl,bl
mov ah,02h
int 21h
mov dl,d
add dl,30h
mov ah,02h
int 21h
end start
Table
Instruction
Memory Address
Hex Code
mov ax,@data
0715:0000
B8 10 07
mov ds,ax
0715:0003
8E D8
mov dx,offset a
0715:0005
BA 00 00
mov ah,09h
0715:0008
B4 09
int 21h
0715:000A
CD 21
mov ah,01h
0715:000C
B4 01
int 21h
0715:000E
CD 21
mov bh,al
0715:0010
8A F8
mov ah,01h
0715:0012
B4 01
int 21h
0715:0014
CD 21
mov bl,al
0715:0016
8A D8
mov dx,offset b
0715:0018
BA 19 00
mov ah,09h
0715:001B
B4 09
int 21h
0715:001D
CD 21
mov ch,al
0715:0023
8A E8
mov ah,01h
0715:0025
B4 01
int 21h
0715:0029
CD 21
mov cl,al
0715:0029
8A C8
mov ah,00h
0715:002D
B4 00
aaa
0715:002F
37
add bh,ah
0715:0030
02 FC
add bh,ch
0715:0032
02 FD
mov ah,00h
0715:0034
B4 00
aaa
0715:003B
37
mov dx,offset c
0715:0042
BA 33 00
int 21h
0715:0047
CD 21
mov ah,02h
0715:004B
B4 02
mov dl,bl
0715:004F
8A D3
int 21h
0715:0053
CD 21
Output
6. Addition of two 16bit numbers
Code
.model small
.stack 100h
.data
b dw 08h
c dw 02h
.code
MAIN PROC
mov ax,@data
mov ds,ax
mov bx,b
mov cx,c
sub bx,cx
add bx,30h
mov ah,02
mov dx,bx
int 21h
main endp
end main
Table
Instruction
Memory Address
Hex Code
mov ax,@data
0721:0000
B8 20 07
mov ds,ax
0721:0003
8E D8
mov bx,b
0721:0005
8B 1E 00 00
mov cx,c
0721:0009
8B 0E 02 00
sub bx,cx
0721:000D
2B D9
mov ah,02
0721:0012
B4 02
mov dx,bx
0721:0014
8B D3
int 21h
0721:0016
CD 21
Output
7. Multiplication of two 32bit number
Code
.model small
.data
mult1 dw 2521H dw 3206H
mult2 dw 0A26H dw 6400H
ans dw 0,0,0,0
.code
mov ax,@data mov ds,ax
; LEA SI,ans
mov ax,mult1mul mult2
mov ans,ax mov ans+2,dx
mov ax,mult1+2 mul mult2
add ans+2,ax adc ans+4,dx adc ans+6,0
mov ax,mult1 mul mult2+2 add ans+2,ax adc ans+4,dx adc ans+6,0
mov ax,mult1+2 mul mult2+2 add ans+4,ax adc ans+6,dx
mov ax,4C00h int 21h
end
Table
Instruction
Memory Address
Hex Code
mult1 dw 2521H
0710:0000
21 25
dw 3206H
0710:0002
06 32
mult2 dw 0A26H
0710:0004
26 0A
dw 6400H
0710:0006
00 64
ans dw 0,0,0,0
0710:0008
E6 CC 5C 8E 7C 68 8A 13
mov ax,@data
0711:0000
B8 10 07
mov ds,ax
0711:0003
8E D8
mov ax,mult1
0711:0005
A1 00
mul mult2
0711:0008
F7 26 04 00
mov ans,ax
0711:000C
A3 08 00
mov ans+2,dx
0711:000F
89 16 0A 00
mov ax,mult1+2
0712:0003
A1 02 00
mul mult2
0712:0006
F7 26 04 00
add ans+2,ax
0712:000A
01 06 0A 00
adc ans+4,dx
0712:000E
11 16 0C 00
adc ans+6,0
0713:0002
83 16 0E 00 00
mov ax,mult1
0713:0007
A1 00 00
mul mult2+2
0713:000A
F7 26 06 00
add ans+2,ax
0713:000E
01 06 0A
adc ans+4,dx
0714:0002
11 16 0C 00
adc ans+6,0
0714:0006
83 16 0E 00 00
mov ax,mult1+2
0714:000B
A1 02 00
mul mult2+2
0714:000E
F7 26 06
add ans+4,ax
0715:0002
01 06 0C 00
adc ans+6,dx
0715:0006
11 16 0E 00
mov ax,4C00h
0715:000A
B8 00 4C
Output
8. ALP to find the Greatest Common Deviser of two unsigned integer.
Code
DATA SEGMENT
NUM1 DW 0017H
NUM2 DW 0007H
GCD DW ?
DATA ENDS
ASSUME CS:CODE,DS:DATA
CODE SEGMENT
START: MOV AX,DATA #data is moved into ax
MOV DS,AX #data stored in the ax is moved into ds
MOV AX,NUM1 #first number is stored in the ax
MOV BX,NUM2 #second number is stored in bx
X1: CMP AX,BX #ax and bx are compared
JE X4 #jump to x4 if both are equal
JB X3 #jump to x3 if ax
X2: MOV DX,0000H #value stored in the 0000H is transferred into dx
DIV BX #the value stored in the accumulator is divided by bx and the result is stored in al register
CMP DX,0000H # the value is compared between the two registers
JE X4 #jump to x4 if both are equal
MOV AX,DX #move the content of ax to dx
JMP X1 # jump to x1
X3: XCHG AX,BX #exchange the contents stored in the ax and bx registers
JMP X2 #jump to the statement x2
X4: MOV GCD ,BX #move the content stored in bx register to gcd register
MOV AH,4CH # move 4CH to ah register
INT 21H
CODE ENDS
END START
Table
Instruction
Memory Address
Hex Code
MOV AX,DATA
0711:0000
B8 10 07
MOV DS,AX
0711:0003
8E D8
MOV AX,NUM1
0711:0005
A1 00 00
MOV BX,NUM2
0711:0008
8B 1E 02 00
JE X4
0711:000E
74 13
JB X3
0712:0000
72 0E
DIV BX
0712:0005
F7
CMP DX,0000H
0712:0007
83 FA 00
JE X4
0712:000A
74 07
MOV AX,DX
0712:000C
8B C2
JMP X1
0712:000E
EB EC
JMP X2
0713:0001
EB EF
MOV AH,4CH
B4 4C
B4 4C
INT 21H
0713:0009
CD 21
Output
9. ALP to find the Sum and average of unsigned integer.
Code
DATA SEGMENT
A DW 1234H,3223H,0FFFFH,4326H,0FEF3H,4325H
N DW 0006H
SUM DW 2 DUP(0)
AVG DW ?
DATA ENDS
ASSUME CS:CODE,DS:DATA
CODE SEGMENT
START: MOV AX,DATA
MOV DS,AX
MOV SI,0000H
MOV DX,0000H
MOV CX,N
MOV AX,0000H
CLC
X: ADD AX,A[SI]
JC K
X1: INC SI
INC SI
LOOP X
JMP QUIT
K: ADD DX,0001H
JMP X1
QUIT: MOV SUM,AX
MOV SUM+2,DX
DIV N
MOV AVG,AX
MOV AH,4CH
INT 21H
CODE ENDS
END START
Table
Instruction
Memory Address
Hex Code
MOV DS,AX
0712:0003
8E D8
MOV SI,0000H
0712:0005
BE 00 00
MOV DX,0000H
0712:0008
BA 00 00
MOV AX,0000H
0712:000F
B8 00 00
ADD AX,A[SI]
0713:0003
03 04
JC K
0713:0005
72 06
INC SI
0713:0007
46
LOOP X
0713:0009
E2 F8
JMP QUIT
0713:000B
EB 05
ADD DX,0001H
0713:000D
83 22 01
JMP X1
0714:0000
EB F5
DIV N
0714:0009
F7 36 0C
MOV AH,4CH
0715:0000
B4 4C
INT 21H
0715:0002
CD 21
Output
10. ALP to find the factorial for a number
Code
DATA SEGMENT
N DB 06H
FACT DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV AX, 1
MOV BL, N
MOV BH, 0
CALL FACTORIAL
MOV FACT, AX
MOV AH, 4CH
INT 21H
FACTORIAL PROC
CMP BX, 1
JE L1
PUSH BX
DEC BX
CALL FACTORIAL
POP BX
MUL BX
L1: RET
FACTORIAL ENDP
CODE ENDS
END START
Table
Instruction
Memory Address
Hex Code
MOV AX, DATA
0711:0000
B8 10 07
MOV DS, AX
0711:0003
8E D8
MOV AX, 1
0711:0005
B8 01 00
MOV BL, N
0711:0008
8A 1E 00 00
MOV BH, 0
0711:000C
B7 00
CALL FACTORIAL
0711:000E
E8 07 00
MOV FACT, AX
0712:0001
A3 01 00
MOV AH, 4CH
0712:0004
B4 4C
INT 21H
0712:0006
CD 21
CMP BX, 1
0712:0008
83 FB 01
JE L1
0712:000B
74 08
PUSH BX
0712:000D
53
DEC BX
0712:000E
4B
POP BX
0713:0002
5B
MUL BX
0713:0003
F7 E3
RET
0713:0005
C3
Output
11. ALP for conversion of 16-bit HEX number into its equivalent BCD number.
Code
DATA SEGMENT
VAR1 DW 8560H
VAR2 DW 3297H
RES DW ?
DATA ENDS
ASSUME CS:CODE,DS:DATA
CODE SEGMENT
START: MOV AX,DATA
MOV DS,AX
MOV AX,VAR1
CLC
MOV BX,0000H
ADD AX,VAR2
JNC K
INC BX
K: MOV RES,AX
MOV RES+2,BX
MOV AH,4CH
INT 21H
CODE ENDS
END START
Table
Instruction
Memory Address
Hex Code
VAR1 DW 8560H
0710:0000
60 85
VAR2 DW 3297H
0710:0002
97 32
RES DW ?
0710:0004
F7 B7
MOV DS,AX
0711:0003
8E D8
MOV AX,VAR1
0711:0005
A1 00 00
MOV BX,0000H
0711:0009
BB 00 00
ADD AX,VAR2
0711:000C
03 06 02 00
JNC K
0712:0000
73 01
INC BX
0712:0002
43
MOV RES,AX
0712:0003
A3 04 00
MOV RES+2,BX
0712:0006
89 1E 06 00
MOV AH,4CH
0712:000A
B4 4C
INT 21H
0712:000B
CD 21
Output
12. ALP for conversion of 16-bit BCD number into its equivalent HEX number
Code
DATA SEGMENT
HEX DW 0FFFFH
BCD DW 5 DUP(0)
DATA ENDS
ASSUME CS:CODE,DS:DATA
CODE SEGMENT
START: MOV AX,DATA
MOV DS,AX
MOV SI ,OFFSET BCD
MOV AX,HEX
MOV CX,2710H
CALL SUB1
MOV CX,03E8H
CALL SUB1
MOV CX,0064H
CALL SUB1
MOV CX,000AH
CALL SUB1
MOV [SI],AL
MOV AH,4CH
INT 21H
SUB1 PROC NEAR
MOV BH,0FFH
X1: INC BH
SUB AX,CX
JNC X1
ADD AX,CX
MOV [SI] ,BH
INC SI
RET
SUB1 ENDP
CODE ENDS
END START
Table
Instruction
Memory Address
Hex Code
START: MOV AX,DATA
0711:0000
B8 10 07
mov ds, ax
0711:0003
8E D8
MOV SI ,OFFSET BCD
0711:0005
BE 02 00
MOV AX,HEX
0711:0008
A1 00 00
MOV CX,2710H
0711:000B
B9 10 27
CALL SUB1
0711:000E
E8 18 00
MOV BH,0FFH
0711:0029
B7 FF
X1: INC BH
0711:002B
FE C7
SUB AX,CX
0711:002D
2B C1
JNC X1
0711:002F
73 FA
X1: INC BH
0711:002B
FE C7
SUB AX,CX
0711:002D
2B C1
JNC X1
0711:002F
73 FA
X1: INC BH
0711:002B
FE C7
SUB AX,CX
0711:002D
2B C1
JNC X1
0711:002F
73 FA
X1: INC BH
0711:002B
FE C7
SUB AX,CX
0711:002D
2B C1
JNC X1
0711:002F
73 FA
ADD AX,CX
0711:0031
03 C1
MOV [SI] ,BH
0711:0033
88 3C
INC SI
0711:0035
46
MOV CX,03E8H
0711:0011
B9 E8 03
CALL SUB1
0711:0014
E8 12 00
MOV BH,0FFH
0711:0029
B7 FF
X1: INC BH
0711:002B
FE C7
SUB AX,CX
0711:002D
2B C1
JNC X1
0711:002F
73 FA
ADD AX,CX
0711:0031
03 C1
MOV [SI] ,BH
0711:0033
88 3C
INC SI
0711:0035
46
MOV CX,0064H
0711:0017
B9 64 00
MOV [SI],AL
0711:0023
88 04
MOV AH,4CH
0711:0025
B4 4C
INT 21H
0711:0027
CD 21
Output
13. BCD to 7 segment code conversion
Code
Code
.MODEL SMALL
.DATA
LOOKUP DB 01H, 04H, 1AH, 09H, 02H
KEY DB 02H
.CODE
MOV AX, @DATA
MOV DS, AX
MOV BX, OFFSET LOOKUP
MOV AL, KEY
XLAT
MOV BH, AL
MOV CH, 02H
MOV CL, 04H
L2: ROL BH, CL
MOV DL, BH
AND DL, 0FH
CMP DL, 09
JBE L4
ADD DL, 07
MOV AH, 02
INT 21H
DEC CH
JNZ L2
MOV AH, 4CH
INT 21H
END
Table
Instruction
Memory Address
HEX Code
LOOKUP DB 01H, 04H, 1AH, 09H, 02H
0710:0000
01 04 1A 09 02
key db 02h
0710:0005
02
mov ax, @data
0711:0000
B8 10 07
mov ds, ax
0711:0003
8E D8
mov bx, offset lookup
0711:0005
BB 00 00
mov al, key
0711:0008
A0 05
xlat
0711:000B
D7
mov bh, al
0711:000C
8A F8
mov ch, 02h
0711:000E
B5 02
mov cl, 04h
0712:0000
B1 04
l2: rol bh, cl
0712:0002
D2 C7
mov dl, bh
0712:0004
8A
and dl, 0fH
0712:0006
80 E2 0F
cmp dl, 09
0712:0009
80 FA 09
jbe l4
0712:000C
76 03
add dl, 07
0712:000E
80 C2 07
l4: add dl, 30H
0713:0001
80 C2 30
mov ah, 02
0713:0004
B4 02
int 21H
0713:0006
CD 21
dec ch
0713:0008
FE CD
jnz l2
0713:000A
75 E6
mov ah, 4cH
0713:000C
B4 4C
int 21H
0713:000E
CD 21
Output
14. ALP to copy the string of successive memory locations from one memory to other
a. Using string instructions
Code
DATA SEGMENT
SOURCE DB "BIOMEDICAL"
DATA ENDS
EXTRA SEGMENT
DEST DB ?
EXTRA ENDS
CODE SEGMENT
ASSUME CS:CODE , DS:DATA, ES:EXTRA
START : MOV AX,DATA
MOV DS,AX
MOV AX,EXTRA
MOV ES,AX
MOV SI,00H
MOV DI,00H
CLD
MOV CX,000AH
REP MOVSB
X: MOV AL,SOURCE [SI]
MOV DEST [DI],AL
INC SI
INC DI
LOOP X
MOV AH,4CH
INT 21H
CODE ENDS
END START
Table
Instruction
Memory Address
Hex Code
MOV DS,AX
0710:0023
8A 04
MOV AX,EXTRA
0710:0025
B8 11 07
MOV ES,AX
0710:0028
8E C0
MOV SI,00H
0710:002A
BE 00 00
MOV DI,00H
0710:002D
BF 00 00
CLD
0710:0030
FC
MOV CX,000AH
0710:0031
B9 0A 00
INC SI
0710:003A
46
INC DI
0710:003B
47
LOOP X
0710:003C
E2F8
MOV AH,4CH
0710:003E
B4 4C
INT 21H
0710:0040
CD 21
Output
1 4. . ALP to copy the string of successive memory locations from one memory to other
b. Without using string instruction
Code
DATA SEGMENT
SOURCE DB "BIOMEDICAL"
DATA ENDS
EXTRA SEGMENT
DEST DB ?
EXTRA ENDS
CODE SEGMENT
ASSUME CS:CODE ,DS:DATA,ES:EXTRA
START : MOV AX,DATA
MOV DS,AX
MOV AX,EXTRA
MOV ES,AX
MOV SI,00H
MOV DI,00H
MOV SI,OFFSET SOURCE
MOV DI,OFFSET DEST
MOV CX,000AH
X: MOV AL,SOURCE [SI]
MOV DEST [DI],AL
INC SI
INC DI
LOOP X
MOV AH,4CH
INT 21H
CODE ENDS
END START
Table
Instruction
Memory Address
Hex Address
MOV DS,AX
0712:0003
8E D8
MOV AX,EXTRA
0712:0005
B8 11 07
MOV ES,AX
0712:0008
8E C0
MOV SI,00H
0712:000A
BE 00 00
MOV DI,00H
0712:000D
BF 00 00
MOV SI,OFFSET SOURCE
0713:0000
BE 00 00
MOV DI,OFFSET DEST
0713:0003
BF 00 00
MOV CX,000AH
0713:0006
B9 0A 00
INC DI
0713:000E
47
LOOP X
0713:000F
E2
Output
15. ALP to Sort a set of unsigned integer numbers in ascending/ descending order using Bubble sort algorithm.
Code
.MODEL SMALL
.STACK 100H
.DATA
MSG1 DB 'enter elements: $'
MSG2 DB 'AFTER SORTING: $'
ARR DB 100 dup (0)
.CODE
MAIN PROC
MOV AX,@DATA
MOV DS,AX
MOV AH,9
lea DX,MSG1 ;DISPLAY MSG1
INT 21H
XOR CX, CX ;clear CX
MOV AH,1
INT 21H ;first input
XOR SI,SI
WHILE_:
CMP AL, 0dH ;compare input with CR
JE END_WHILE
MOV ARR[SI],AL ;move input into array
INC SI ;SI+1
INC CX
MOV AH,2
MOV DL,' ' ;display space
INT 21h
MOV AH,1
INT 21H
JMP WHILE_
END_WHILE:
MOV AH,2
MOV DL,0DH
INT 21H
MOV DL,0AH
INT 21H
JCXZ EXIT
LEA SI,ARR
MOV BX,CX
CALL BUBBLE_SORT
MOV AH,9
LEA DX,MSG2
INT 21H
XOR SI,SI
TOP:MOV AH,2
MOV DL,ARR[SI]
INT 21H
MOV DL,' '
INT 21H
INC SI
LOOP TOP
EXIT:
MOV AH,4CH
INT 21H
MAIN ENDP
BUBBLE_SORT PROC
; this procedure will sort the array in ascending order
; input : SI=offset address of the array
; : BX=array size
; output : Sorted Array
PUSH AX ; push AX onto the STACK
PUSH BX ; push BX onto the STACK
PUSH CX ; push CX onto the STACK
PUSH DX ; push DX onto the STACK
PUSH DI ; push DI onto the STACK
MOV AX, SI ; set AX=SI
MOV CX, BX ; set CX=BX
DEC CX ; set CX=CX-1
@OUTER_LOOP: ; loop label
MOV BX, CX ; set BX=CX
MOV SI, AX ; set SI=AX
MOV DI, AX ; set DI=AX
INC DI ; set DI=DI+1
@INNER_LOOP: ; loop label
MOV DL, [SI] ; set DL=[SI]
CMP DL, [DI] ; compare DL with [DI]
JNG @SKIP_EXCHANGE ; jump to label @SKIP_EXCHANGE if DL<[DI]
XCHG DL, [DI] ; set DL=[DI], [DI]=DL
MOV [SI], DL ; set [SI]=DL
@SKIP_EXCHANGE: ; jump label
INC SI ; set SI=SI+1
INC DI ; set DI=DI+1
DEC BX ; set BX=BX-1
JNZ @INNER_LOOP ; jump @INNER_LOOP if BX!=0
LOOP @OUTER_LOOP ; jump @OUTER_LOOP while
POP DI ; pop a value from STACK into DI
POP DX ; pop a value from STACK into DX
POP CX ; pop a value from STACK into CX
POP BX ; pop a value from STACK into BX
POP AX ; pop a value from STACK into AX
RET ; return control to the calling procedure
BUBBLE_SORT ENDP
END MAIN
Table
Instruction
Memory Address
Hex Address
MOV AX,@DATA
0729:0000
BS 20 07
MOV DS,AX
0729:0003
8E D8
MOV AH,9
0729:0005
B4 09
INT 21H
0729:000A
CD 21
MOV AH,1
0729:000E
B4 01
XOR SI,SI
072A:0002
33 F6
INC SI
072A:000B
46
INC CX
072A:000C
41
MOV AH,2
072A:000D
B4 02
MOV DL
072B:0001
CD 21
MOV AH,1
072B:0003
B4 01
MOV AH,2
072B:0009
B4 02
MOV DL,0DH
072B:000B
B2 0D
MOV DL,0AH
072B:000F
B2 0A
JCXZ EXIT
072C:0003
E3 1F
LEA SI,ARR
072C:0005
BE 21 00
MOV BX,CX
072C:0008
8B D9
MOV AH,9
072C:000D
B4 09
LEA DX,MSG2
072C:000F
BA 11 00
INT 21H
072D:0002
CD 21
XOR SI,SI
072D:0004
33 F6
TOP:MOV AH,2
072D:0006
B4
MOV DL,ARR[SI]
072D:0008
8A 54 21
INT 21H
072D:000B
CD 21
MOV DL,' '
072D:000D
B2 20
INT 21H
072D:000F
CD 21
INC SI
072E:0001
46
LOOP TOP
072E:0002
E2 F2
MOV AH,4CH
072E:0004
B4 4C
PUSH AX
072E:0008
50
PUSH BX
0729:0059
53
PUSH CX
0729:005A
51
PUSH DX
0729:005B
52
PUSH DI
0729:005C
57
MOV AX, SI
0729:005D
8B C6
MOV CX, BX
0729:005F
8B CB
DEC CX
0729:0061
49
MOV BX, CX
0729:0062
8B D9
MOV SI, AX
0729:0064
8B F0
MOV DI, AX
0729:0066
8B F8
INC DI
0729:0068
49
MOV DL, [SI]
0729:0069
8A 14
CMP DL, [DI]
0729:006B
3A 15
XCHG DL, [DI]
0729:006F
86 15
MOV [SI], DL
0729:0071
88 14
POP DI
0729:007A
5F
POP DX
0729:007B
5A
POP BX
0729:007D
5B
RET
0729:007F
C3
Output
16. Develop and execute ALP that implements Binary search algorithm. The data consists of sorted 16 bit unsigned integers. The search key is also a 16 bit unsigned integer.
Code
DATA SEGMENT
ARR DW 05H,0111H,2161H,4541H,7161H,8231H
SR EQU 4541H
MSG1 DB 'ELEMENT FOUND AT '
RES DB ' RD POSITION','$'
MSG2 DB 'ELEMENT NOT FOUND','$'
DATA ENDS
ASSUME CS:CODE,DS:DATA
CODE SEGMENT
START: MOV AX,DATA
MOV DS,AX
MOV BX,00H
MOV CX,SR
MOV DX,05H
LP: CMP BX,DX
JA FAILURE
MOV AX,BX
ADD AX,DX
SHR AX,01
MOV SI,AX
ADD SI,SI
CMP CX,ARR[SI]
JAE BIGGER
DEC AX
MOV DX,AX
JMP LP
BIGGER: JE SUCCESS
INC AX
MOV BX,AX
JMP LP
SUCCESS:ADD AL,01H
ADD AL,2FH
MOV RES,AL
LEA DX,MSG1
JMP DISPLAY
FAILURE: LEA DX,MSG2
DISPLAY: MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
Table
Instruction
Memory Address
Hex Code
MOV AX,DATA
0714:0000
B8 10 07
MOV DS,AX
0714:0003
8E D8
MOV BX,00H
0714:0005
BB 00 00
MOV CX,SR
0714:0008
B9 41 45
MOV DX,05H
0714:000B
BA 05 00
LP: CMP BX,DX
0714:000E
3B DA
MOV AX,BX
0715:0002
8B C3
ADD AX,DX
0715:0004
030 C2
SHR AX,01
0715:0006
D1 E8
ADD SI,SI
0715:000A
03 F6
CMP CX,ARR[SI]
0715:000C
3B 0C
MOV DX,AX
0716:0001
8B D0
JMP LP
0716:0003
EB E9
INC AX
0716:0007
40
MOV BX,AX
0716:0008
8B D8
ADD AL,2FH
0716:000E
04 2F
MOV RES,AL
0717:0000
A2 1D 00
LEA DX,MSG1
0717:0003
BA 0C 00
JMP DISPLAY
0717:0006
EB 03
INT 21H
0717:000D
CD 21
MOV AH,4CH
0717:000F
B4 4C
Output