42
Name : RAJESH M Microprocessor 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

avoidtrouble.files.wordpress.com  · Web viewName : RAJESH MMicroprocessor and Interfacing. 8086 Experiments. Addition of two 8bit numbers. Code . DATA SEGMENT. VAR1 DB 85H. VAR2

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

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