mplab programs
DESCRIPTION
MPlabTRANSCRIPT
Data transfer instructions
Write an ALP to move a block of data BYTE from one memory location to another WITHOUT
OVERLAPPING
.MODEL SMALL
.DATA
SRC DB 01h,02h,03h,04h,05h
DES DB 05h DUP(?)
.CODE
MOV AX,@DATA
MOV DS,AX
MOV SI, OFFSET SRC
MOV DI, OFFSET DES
MOV CL, 05h
START: MOV AL,[SI]
MOV [DI],AL
INC SI
INC DI
DEC CL
JNZ START
MOV AH, 4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
Write an ALP to move a block of data WORD from one memory location to another WITHOUT
OVERLAPPING
.MODEL SMALL
.DATA
SRC DW 1234h,2222h,3333h,4444h
DES DW 04h DUP(?)
.CODE
MOV AX,@DATA
MOV DS,AX
MOV SI, OFFSET SRC
MOV DI, OFFSET DES
MOV CL, 08h
START: MOV AL,[SI]
MOV [DI],AL
INC SI
INC DI
DEC CL
JNZ START
MOV AH, 4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
Write an ALP to move a block of data BYTE from one memory location to another WITH
OVERLAP
.MODEL SMALL
.DATA
SRC DB 11h,22h,33h,44h,55h
DES DB 05h DUP(?)
.CODE
MOV AX,@DATA
MOV DS,AX
MOV SI, OFFSET SRC
MOV DI, OFFSET DES
MOV CL, 05h
START: MOV AL,[SI+04h]
MOV [DI+02h],AL
DEC SI
DEC DI
DEC CL
JNZ START
MOV AH, 4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
Write an ALP to move a block of data WORD from one memory location to another WITH
OVERLAP
.MODEL SMALL
.DATA
SRC DW 1234h,2222h,3333h,4444h
DES DW 04h DUP(?)
.CODE
MOV AX,@DATA
MOV DS,AX
MOV SI, OFFSET SRC
MOV DI, OFFSET DES
MOV CL, 08h
START: MOV AL, [SI+07h]
MOV [DI+02h], AL
DEC SI
DEC DI
DEC CL
JNZ START
MOV AH, 4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
Write an ALP to interchange ‘N’ BYTES of data stored in consecutive memory locations
.MODEL SMALL
.DATA
SRC DB 11h,22h,33h,44h,55h
DES DB 66h,77h,88h,99h,0AAh
.CODE
MOV AX,@DATA
MOV DS,AX
MOV SI, OFFSET SRC
MOV DI, OFFSET DES
MOV CL, 05h
START: MOV AL,[SI]
MOV BL,[DI]
MOV [SI],BL
MOV [DI],AL
INC SI
INC DI
DEC CL
JNZ START
MOV AH, 4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
Write an ALP to interchange ‘N’ WORDS of data stored in consecutive memory locations
.MODEL SMALL
.DATA
SRC DW 1234h,2222h,3333h,4444h
DES DW 5555h,6666h,7777h,8888h
.CODE
MOV AX,@DATA
MOV DS,AX
MOV SI, OFFSET SRC
MOV DI, OFFSET DES
MOV CL, 08h
START: MOV AL,[SI]
MOV BL,[DI]
MOV [SI],BL
MOV [DI],AL
INC SI
INC DI
DEC CL
JNZ START
MOV AH, 4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
Write an ALP to MOVE a block of data WORD from one memory location to another IN REVERSE
ORDER
.MODEL SMALL
.DATA
SRC DW 1111h,2222h,3333h
DES DW 03h DUP(?)
.CODE
MOV AX,@DATA
MOV DS,AX
MOV SI, OFFSET SRC+05h
MOV DI, OFFSET DES
MOV CL, 06h
START: MOV AL,[SI]
MOV[DI],AL
DEC SI
INC DI
DEC CL
JNZ START
MOV AH,4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
Write an ALP to INTERCHANGE ‘N’ bytes of data in REVERSE ORDER
.MODEL SMALL
.DATA
X DB 01h,02h,03h,04h,05h
Y DB 0Ah,0Bh,0Ch,0Dh,0Eh
.CODE
MOV AX,@DATA
MOV DS,AX
MOV SI,OFFSET [X+04h]
MOV DI,OFFSET [Y]
MOV CL,05h
UP: MOV AL,[SI]
MOV BL,[DI]
MOV [SI],BL
MOV [DI],AL
DEC SI
INC DI
DEC CL
JNZ UP
MOV AH,4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
Arithmetic & Logical instructions
Write an ALP to ADD ‘N’ BYTES of data stored in consecutive memory locations and store the
result in a memory location
.MODEL SMALL
.DATA
NUM DB 01h,02h,03h,04h,05h
RES DB ?
.CODE
MOV AX,@DATA
MOV DS,AX
MOV SI, OFFSET NUM
MOV CL, 05h
MOV BL,00h
MOV AL,[SI]
UP: INC SI
ADD AL,[SI]
JNC DOWN
INC BL
DOWN: DEC CL
JNZ UP
MOV [RES],AL
MOV [RES+1],BL
MOV AH, 4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
Write an ALP to ADD ‘N’ WORDS of data stored in consecutive memory locations and store the
result in a memory location
.MODEL SMALL
.DATA
NUM DW 0FFFFh,0EEEEh,0DDDDh,0CCCCh
RES DW 02h DUP(?)
.CODE
MOV AX,@DATA
MOV DS,AX
MOV SI, OFFSET NUM
MOV CL, 04h
MOV BL,00h
MOV AX,[SI]
UP: INC SI
INC SI
ADD AX,[SI]
JNC DOWN
INC BL
DOWN: DEC CL
JNZ UP
MOV [RES],AX
MOV [RES+2],BX
MOV AH, 4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
Write an ALP to ADD ‘N’ WORDS of data along WITH CARRY
.MODEL SMALL
.DATA
X DW 1234h,2222h
Y DW 3333h,4444h
R DW ?
.CODE
MOV AX,@DATA
MOV DS,AX
MOV CX,02h
MOV BX,00
CLC
UP: MOV AX,X[BX]
ADC AX,Y[BX]
MOV R[BX],AX
INC BX
INC BX
LOOP UP
MOV AH,4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
Write an ALP to SUBTRACT ‘N’ WORDS of data along WITH BORROW
.MODEL SMALL
.DATA
X DW 1234h,2222h
Y DW 3333h,4444h
R DW 02 DUP(?)
.CODE
MOV AX,@DATA
MOV DS,AX
MOV CX,02h
MOV BX,00
CLC
UP: MOV AX,X[BX]
SBB AX,Y[BX]
MOV R[BX],AX
INC BX
INC BX
LOOP UP
MOV AH,4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
Write an ALP to carry out SIGNED MULTIPLICATION
.MODEL SMALL
.DATA
NUM1 DW -128h
NUM2 DW 0045h
RES DW 02h DUP(?)
.CODE
MOV AX,@DATA
MOV DS,AX
MOV AX,NUM1
MOV BX,NUM2
MUL BX
MOV RES,AX
MOV RES+2,DX
MOV AH,4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
Write an ALP to carry out SIGNED MULTIPLICATION (USING IMUL INSTRUCTION)
.MODEL SMALL
.DATA
NUM1 DW -128h
NUM2 DW 0045h
RES DW 02h DUP(?)
.CODE
MOV AX,@DATA
MOV DS,AX
MOV AX,NUM1
MOV BX,NUM2
IMUL BX
MOV RES,AX
MOV RES+2,DX
MOV AH,4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
Write an ALP to carry out UNSIGNED DIVISION
.MODEL SMALL
.DATA
NUM1 DW 2222h
NUM2 DW 02h
RES DW 02h DUP(?)
.CODE
MOV AX,@DATA
MOV DS,AX
MOV AX,NUM1
MOV BX,NUM2
DIV BX
MOV RES,AX
MOV RES+2,DX
MOV AH,4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
Write an ALP to carry out SIGNED DIVISION
.MODEL SMALL
.DATA
NUM1 DW -128h
NUM2 DW 0045h
RES DW 02h DUP(?)
.CODE
MOV AX,@DATA
MOV DS,AX
MOV AX,NUM1
MOV BX,NUM2
CWD
IDIV BX
MOV RES,AX
MOV RES+2,DX
MOV AH,4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
Write an ALP to find GCD of two numbers
.MODEL SMALL
.DATA
N1 DB 03h
N2 DB 06h
GCD DB ?
.CODE
MOV AX,@DATA
MOV DS,AX
MOV AL,N1
MOV BL,N2
UP: CMP AL,BL
JE LAST
JA L1
SUB BL,AL
JMP UP
L1: SUB AL,BL
JMP UP
LAST: MOV GCD,AL
MOV AH,4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
Write an ALP to find LCM of two numbers
.MODEL SMALL
.STACK 64h
.DATA
NUM DW 0025,0015
LCM DW 02 DUP(?)
.CODE
MOV AX,@DATA
MOV DS,AX
MOV DX,00h
MOV AX,[NUM]
MOV BX,[NUM+2]
UP: PUSH AX
PUSH DX
DIV BX
CMP DX,00h
JE LAST
POP DX
POP AX
ADD AX,NUM
JNC UP
INC DX
JMP UP
LAST: POP [LCM+2]
POP [LCM]
MOV AH,4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
Write an ALP to perform ASCII ADJUST after ADDITION, SUBTRACTION and
MULTIPLICATION
ADDITION:-
.MODEL SMALL
.DATA
N1 DB 38h
N2 DB 34h
N3 DW ?
.CODE
MOV AX,@DATA
MOV DS,AX
MOV AL,N1
AND AL,0Fh
MOV BL,N2
AND BL,0Fh
MOV AH,00H
ADD AL,BL
AAA
ADD AX,3030h
MOV N3,AX
MOV AH,4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
SUBTRACTION:-
.MODEL SMALL
.DATA
N1 DB 38h
N2 DB 34h
N3 DW ?
.CODE
MOV AX,@DATA
MOV DS,AX
MOV AL,N1
AND AL,0Fh
MOV BL,N2
AND BL,0Fh
MOV AH,00H
SUB AL,BL
AAS
ADD AX,3030h
MOV N3,AX
MOV AH,4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
MULTIPLICATION:-
.MODEL SMALL
.DATA
N1 DB 38h
N2 DB 34h
N3 DW ?
.CODE
MOV AX,@DATA
MOV DS,AX
MOV AL,N1
AND AL,0Fh
MOV BL,N2
AND BL,0Fh
MOV AH,00H
MUL BL
AAM
ADD AX,3030h
MOV N3,AX
MOV AH,4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
Write an ALP to perform ASCII ADJUST before DIVISION
.MODEL SMALL
.DATA
NUM1 DW 0405h
NUM2 DB 36h
RES DB 02 DUP(?)
.CODE
MOV AX,@DATA
MOV DS,AX
MOV BL,NUM2
AND BL,0Fh
MOV AX,NUM1
AAD
DIV BL
OR AX,3030h
MOV [RES],AL
MOV [RES+1],AH
MOV AH,4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
Write an ALP to find SQUARE of a number
.MODEL SMALL
.DATA
X DW 012h
R DW ?
.CODE
MOV AX,@DATA
MOV DS,AX
MOV AX,X
MUL AX
MOV [R],AX
MOV [R+2],DX
MOV AH, 4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
Write an ALP to find CUBE of a number
.MODEL SMALL
.DATA
X DW 012h
R DW ?
.CODE
MOV AX,@DATA
MOV DS,AX
MOV AH,00h
MOV AX,X
MOV BX,AX
MUL AX
MUL BX
MOV [R],AX
MOV [R+2],DX
MOV AH,4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
Code conversions:-
Write an ALP to convert 8 bit BCD to BINARY
.MODEL SMALL
.DATA
NUM DB 99h
BIN DB 02 DUP(?)
.CODE
MOV AX,@DATA
MOV DS,AX
MOV AL,NUM
AND AL,0F0h
MOV CL,04h
SHR AL,CL
MOV BL,0Ah
MUL BL
MOV BL,AL
MOV AL,NUM
AND AL,0Fh
ADD AL,BL
MOV BIN,AL
MOV AH,4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
Write an ALP to convert 16 bit (8 bit) BCD to HEXADECIMAL
.MODEL SMALL
.DATA
NUM DW 9999h
BIN DW 02 DUP(?)
.CODE
MOV AX,@DATA
MOV DS,AX
MOV AX,[NUM]
AND AX,0F000h
MOV CL,0Ch
ROR AX,CL
MOV BX,03E8h
MUL BX
MOV BX,AX
MOV AX,[NUM]
AND AX,0F00h
MOV CL,08h
ROR AX,CL
MOV DX,64h
MUL DX
ADD BX,AX
MOV AX,[NUM]
AND AX,00F0h
MOV CL,04h
ROR AL,CL
MOV DX,0Ah
MUL DX
ADD BX,AX
MOV AX,[NUM]
AND AX,000Fh
ADD AX,BX
MOV [BIN],AX
MOV AH,4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
Write an ALP to convert binary (HEX) number to BCD
.MODEL SMALL
.DATA
NUM DW 0ABCDh
RES DB 05 DUP(?)
.CODE
MOV AX,@DATA
MOV DS,AX
MOV AX,[NUM]
LEA SI,RES
MOV BX,0Ah
BACK: MOV DX,0000h
DIV BX
MOV [SI+4],DL
DEC SI
CMP AX,0000h
JNE BACK
MOV AH,4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
Write an ALP to find the FACTORIAL of a number
.MODEL SMALL
.DATA
NUM1 DB 05h
RES DB 01 DUP(?)
.CODE
MOV AX,@DATA
MOV DS,AX
MOV AX,0001h
MOV BL,NUM1
CMP BL,00h
JC L1
CALL FACTORIAL
L1: MOV RES,AL
MOV AH,4Ch
INT 21h
FACTORIAL PROC NEAR
CMP BX,0001h
JC RETURN
PUSH BX
DEC BX
CALL FACTORIAL
POP BX
MUL BX
RET
RETURN: MOV AX,0001h
RET
FACTORIAL ENDP
END
OUTPUT:-
Before execution:-
After execution:-
Bit manipulation instructions
Write an ALP to find whether the given number is POSITIVE or NEGATIVE and display the
corresponding message
.MODEL SMALL
.DATA
NUM DB -04h
MSG1 DB 10,13,'THE NUMBER IS POSITIVE $'
MSG2 DB 10,13,'THE NUMBER IS NEGATIVE $'
.CODE
MOV AX,@DATA
MOV DS,AX
MOV AL,[NUM]
ROL AL,01h
JNC DISP_POS
LEA DX,MSG2
MOV AH,09h
INT 21h
JMP DOWN
DISP_POS: LEA DX,MSG1
MOV AH,09h
INT 21h
DOWN: MOV AH,4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
Write an ALP to find whether the given number is EVEN or ODD and display the corresponding
message
.MODEL SMALL
.DATA
NUM DB 87h
MSG1 DB 10,13,'THE NUMBER IS EVEN $'
MSG2 DB 10,13,'THE NUMBER IS ODD $'
.CODE
MOV AX,@DATA
MOV DS,AX
MOV AL,[NUM]
ROR AL,01h
JNC DISP_EVEN
LEA DX,MSG2
MOV AH,09h
INT 21h
JMP DOWN
DISP_EVEN: LEA DX,MSG1
MOV AH,09h
INT 21h
DOWN: MOV AH,4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
Write an ALP to find the number of 1’s and 0’s in a given number
.MODEL SMALL
.DATA
NUM DB 3Fh
ZERO_CNT DB ?
ONE_CNT DB ?
.CODE
MOV AX,@DATA
MOV DS,AX
MOV AL,[NUM]
MOV BX,0000h
MOV CL,08h
UP: ROR AL,01h
JNC Z_NUM
INC BH
JMP DOWN
Z_NUM: INC BL
DOWN: LOOP UP
MOV [ZERO_CNT],BL
MOV [ONE_CNT],BH
MOV AH,4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
Write an ALP to find whether the given number is 2 out of 5 code or not and display the
corresponding message
.MODEL SMALL
.DATA
NUM DB 11h
MSG1 DB 10,13,'VALID 2 OUT OF 5 CODE $'
MSG2 DB 10,13,'NOT VALID 2 OUT OF 5 CODE $'
.CODE
MOV AX,@DATA
MOV DS,AX
MOV AL,[NUM]
AND AL,1Fh
MOV CX,05h
MOV BL,00h
UP: ROR AL,01h
JNC DOWN
INC BL
DOWN: LOOP UP
CMP BL,02h
JZ DISPLAY
LEA DX,MSG2
MOV AH,09h
INT 21h
JMP LAST
DISPLAY: LEA DX,MSG1
MOV AH,09h
INT 21h
LAST: MOV AH,4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
Write an ALP to find whether the given number is BITWISE PALINDROME or not and display the
corresponding message
.MODEL SMALL
.DATA
NUM DW 0F00Fh
MSG1 DB 10,13,'THE NUMBER IS BITWISE PALINDROME $'
MSG2 DB 10,13,'THE NUMBER IS NOT BITWISE PALINDROME $'
.CODE
MOV AX,@DATA
MOV DS,AX
MOV CX,08h
MOV AX,[NUM]
MOV BX,AX
BACK: ROR AX,01h
JNC NEXT
ROL BX,01h
JC DO
JMP DOWN
NEXT: ROL BX,01h
JC DOWN
DO: LOOP BACK
LEA DX,MSG1
MOV AH,09h
INT 21h
JMP LAST
DOWN: LEA DX,MSG2
MOV AH,09h
INT 21h
LAST: MOV AH,4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
Write an ALP to find whether the given number is NIBBLEWISE PALINDROME or not and display
the corresponding message
.MODEL SMALL
.DATA
NUM DW 1010h
MSG1 DB 10,13,'THE NUMBER IS NIBBLEWISE PALINDROME $'
MSG2 DB 10,13,'THE NUMBER IS NOT NIBBLEWISE PALINDROME $'
.CODE
MOV AX,@DATA
MOV DS,AX
MOV AX,[NUM]
MOV BX,AX
MOV CL,04h
ROR BL,CL
ROL BH,CL
XCHG BH,BL
CMP AX,BX
JZ DISP
LEA DX,MSG2
MOV AH,09h
INT 21h
JMP DOWN
DISP: LEA DX,MSG1
MOV AH,09h
INT 21h
DOWN: MOV AH,4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
Branch/Loop instructions
Write an ALP to add two 10 byte numbers
.MODEL SMALL
.DATA
SRC1 DT 0102030405060708090Ah
SRC2 DT 0A090807060504030201h
RES DW 0Bh DUP(?)
.CODE
MOV AX,@DATA
MOV DS,AX
MOV DX,00h
MOV CL,05h
MOV SI,OFFSET SRC1
MOV DI,OFFSET SRC2
MOV BX,OFFSET RES
UP: MOV AX,[SI]
ADC AX,[DI]
MOV [BX],AX
ADD SI,02h
ADD DI,02h
ADD BX,02h
DEC CL
JNZ UP
JNC DOWN
INC DX
MOV [BX],DX
DOWN: MOV AH,4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
Write an ALP to add two 32 bit numbers
.MODEL SMALL
.DATA
SRC1 DD 01020304h
SRC2 DD 0A090807h
RES DW 03h DUP(?)
.CODE
MOV AX,@DATA
MOV DS,AX
MOV DX,00h
MOV CL,02h
MOV SI,OFFSET SRC1
MOV DI,OFFSET SRC2
MOV BX,OFFSET RES
UP: MOV AX,[SI]
ADC AX,[DI]
MOV [BX],AX
ADD SI,02h
ADD DI,02h
ADD BX,02h
DEC CL
JNZ UP
JNC DOWN
INC DX
MOV [BX],DX
DOWN: MOV AH,4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
Write an ALP to subtract two 32 bit numbers
.MODEL SMALL
.DATA
SRC1 DD 10102030h
SRC2 DD 06070809h
RES DW 03h DUP(?)
.CODE
MOV AX,@DATA
MOV DS,AX
MOV DX,00h
MOV CL,02h
MOV SI,OFFSET SRC1
MOV DI,OFFSET SRC2
MOV BX,OFFSET RES
UP: MOV AX,[SI]
SBB AX,[DI]
MOV [BX],AX
ADD SI,02h
ADD DI,02h
ADD BX,02h
DEC CL
JNZ UP
JNC DOWN
INC DX
MOV [BX],DX
DOWN: MOV AH,4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
Write an ALP to find the LARGEST NUMBER in the given array
.MODEL SMALL
.DATA
NUM DB 01h,02h,03h,04h
RES DB 01h DUP(?)
.CODE
MOV AX,@DATA
MOV DS,AX
MOV CX,03h
LEA SI,NUM
MOV AL,[SI]
UP: INC SI
CMP AL,[SI]
JNC DOWN
MOV AL,[SI]
DOWN: LOOP UP
MOV [RES],AL
MOV AH,4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
Write an ALP to find the SMALLEST NUMBER in the given array
.MODEL SMALL
.DATA
NUM DB 01h,02h,03h,04h
RES DB 01h DUP(?)
.CODE
MOV AX,@DATA
MOV DS,AX
MOV CX,03h
LEA SI,NUM
MOV AL,[SI]
UP: INC SI
CMP AL,[SI]
JC DOWN
MOV AL,[SI]
DOWN: LOOP UP
MOV [RES],AL
MOV AH,4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
Write an ALP to sort an array of numbers in ASCENDING ORDER
.MODEL SMALL
.DATA
NUM DB 01h,05h,02h,03h,04h
.CODE
MOV AX,@DATA
MOV DS,AX
MOV DX,04h
UP1: MOV CX,DX
LEA SI,NUM
UP: MOV AL,[SI]
INC SI
CMP AL,[SI]
JC DOWN
XCHG AL,[SI]
XCHG [SI-01h],AL
DOWN: LOOP UP
DEC DX
JNZ UP1
MOV AH,4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
Write an ALP to sort an array of numbers in DESCENDING ORDER
.MODEL SMALL
.DATA
NUM DB 01H,05h,02h,03h,04h
.CODE
MOV AX,@DATA
MOV DS,AX
MOV DX,04h
UP1: MOV CX,DX
LEA SI,NUM
UP: MOV AL,[SI]
INC SI
CMP AL,[SI]
JNC DOWN
XCHG AL,[SI]
XCHG [SI-01h],AL
DOWN: LOOP UP
DEC DX
JNZ UP1
MOV AH,4Ch
INT 21h
END
OUTPUT:-
Before execution:-
After execution:-
String manipulation instructions
Write an ALP to search an element in a string and display the corresponding message
.MODEL SMALL
.DATA
MSG1 DB 10,13,'THE ELEMENT IS FOUND IN THE STRING$'
MSG2 DB 10,13,'THE ELEMENT IS NOT FOUND IN THE STRING$'
STR DB "BANGALORE"
CHAR DB 'Z'
.CODE
MOV AX,@DATA
MOV DS,AX
MOV ES,AX
MOV CX,09h
LEA DI,STR
MOV AL,[CHAR]
REPNE SCASB
JE DISP
MOV AH,09h
LEA DX,MSG2
INT 21h
JMP LAST
DISP: MOV AH,09h
LEA DX,MSG1
INT 21h
LAST: MOV AH,4Ch
INT 21h
END
OUTPUT:-
After execution:-
For character 'Z':-
For character 'N':-
Write an ALP to find whether the input string is palindrome or not and display the corresponding
message
.MODEL SMALL
.DATA
MSG1 DB 10,13,'ENTER THE STRING: $'
MSG2 DB 10,13,'THE STRING IS PALINDROME $'
MSG3 DB 10,13,'THE STRING IS NOT PALINDROME $'
BUFF DB 80
DB 0
DB 80 DUP(?)
.CODE
MOV AX,@DATA
MOV DS,AX
LEA DX,MSG1
MOV AH,09h
INT 21h
LEA DX,BUFF
MOV AH,0Ah
INT 21h
LEA BX,BUFF+2
MOV CL,[BUFF+1]
MOV CH,00h
MOV DI,CX
DEC DI
MOV SI,00h
SAR CL,01h
BACK: MOV AL,[BX+SI]
MOV AH,[BX+DI]
CMP AL,AH
JNZ LAST
INC SI
DEC DI
DEC CL
JNZ BACK
LEA DX,MSG2
MOV AH,09h
INT 21h
JMP RESULT
LAST: LEA DX,MSG3
MOV AH,09h
INT 21h
RESULT: MOV AH,4Ch
INT 21h
END
OUTPUT:-
After execution:-
Case 1: Not Palindrome
Case 2: Palindrome
Write an ALP to reverse the given string
.MODEL SMALL
.DATA
MSG1 DB 10,13,'ENTER THE STRING:$'
MSG2 DB 10,13,'THE REVERSED STRING IS:$'
BUFF DB 80
DB 0
DB 80 DUP(?)
.CODE
MOV AX,@DATA
MOV DS,AX
MOV AH,09h
LEA DX,MSG1
INT 21h
MOV AH,0Ah
LEA DX,BUFF
INT 21h
MOV AH,09h
LEA DX,MSG2
INT 21h
LEA BX,BUFF
INC BX
MOV CH,00h
MOV CL,BUFF+1
MOV DI,CX
BACK: MOV DL,[BX+DI]
MOV AH,02h
INT 21h
DEC DI
JNZ BACK
MOV AH,4Ch
INT 21h
END
OUTPUT:-
After execution:-
Write an ALP to find whether two strings are equal or not using the CMPS string instruction and
display the corresponding message
.MODEL SMALL
.DATA
MSG1 DB 10,13,'THE STRINGS ARE EQUAL$'
MSG2 DB 10,13,'THE STRINGS ARE NOT EQUAL$'
STR1 DB "STRONG"
STR2 DB "MINDS"
COUNT DW 0006h
.CODE
MOV AX,@DATA
MOV DS,AX
MOV ES,AX
MOV CX,COUNT
LEA SI,STR1
LEA DI,STR2
REPZ CMPSB
JZ STORE1
LEA DX,MSG2
MOV AH,09h
INT 21h
JMP DOWN
STORE1: LEA DX,MSG1
MOV AH,09h
INT 21h
DOWN: MOV AH,4Ch
INT 21h
END
OUTPUT:-
After execution:-
DOS INTERRUPTS
Write an ALP to display a message using DOS interrupts
.MODEL SMALL
.DATA
MSG DB 10,13,'MICROPROCESSORS $'
.CODE
MOV AX,@DATA
MOV DS,AX
CALL FUNCTION
MOV AH,4Ch
INT 21h
FUNCTION PROC
MOV AH,09h
LEA DX,MSG
INT 21h
RET
FUNCTION ENDP
END
OUTPUT:-
After execution:-
Write an ALP to read the buffered inputs from the keyboard using DOS interrupts
.MODEL SMALL
.DATA
MSG DB 10,13,'ENTER THE STRING OF CHARACTERS: $'
BUFF DB 80
DB 0
DB 80 DUP(?)
.CODE
MOV AX,@DATA
MOV DS,AX
CALL FUNCTION
MOV AH,4Ch
INT 21h
FUNCTION PROC
LEA DX,MSG
MOV AH,09h
INT 21h
MOV AH,0Ah
LEA DX,BUFF
INT 21h
RET
FUNCTION ENDP
END
OUTPUT:-
After execution:-
Write an ALP to read a CHARACTER from the keyboard using DOS interrupts using
MACROS
DISPLAY MACRO
LEA DX,MSG
MOV AH,09h
INT 21h
ENDM
READ MACRO
MOV AH,01h
INT 21h
MOV CHAR,AL
ENDM
.MODEL SMALL
.DATA
MSG DB 10,13,'ENTER A CHARACTER: $'
CHAR DB ?
.CODE
MOV AX,@DATA
MOV DS,AX
DISPLAY
READ
MOV AH,4Ch
INT 21h
END
OUTPUT:-
After execution:-
Interfacing programs
STEPPER MOTOR:-
Write an ALP to rotate stepper motor in ANTICLOCKWISE direction
.MODEL SMALL
.DATA
PA EQU 0D880h
PB EQU 0D881h
PC EQU 0D882h
CWR EQU 0D883h
N DW 200
.CODE
MOV AX,@DATA
MOV DS,AX
MOV DX,CWR
MOV AL,80h
OUT DX,AL
MOV CX,N
MOV DX,PC
MOV AL,88h
UP: OUT DX,AL
PUSH CX
CALL DELAY
ROL AL,01h
POP CX
DEC CX
LOOP UP
MOV AH,4Ch
INT 21h
DELAY PROC NEAR
PUSH AX
PUSH BX
PUSH DX
MOV CX,0FFFh
UP2: MOV AX,0FFFFh
UP1: DEC AX
JNZ UP1
LOOP UP2
POP DX
POP BX
POP AX
RET
DELAY ENDP
END
Write an ALP to rotate stepper motor in CLOCKWISE direction
.MODEL SMALL
.DATA
PA EQU 0D880h
PB EQU 0D881h
PC EQU 0D882h
CWR EQU 0D883h
N DW 200
.CODE
MOV AX,@DATA
MOV DS,AX
MOV DX,CWR
MOV AL,80h
OUT DX,AL
MOV CX,N
MOV DX,PC
MOV AL,88h
UP: OUT DX,AL
PUSH CX
CALL DELAY
ROR AL,01h
POP CX
DEC CX
LOOP UP
MOV AH,4Ch
INT 21h
DELAY PROC NEAR
PUSH AX
PUSH BX
PUSH DX
MOV CX,0FFFh
UP2: MOV AX,0FFFFh
UP1: DEC AX
JNZ UP1
LOOP UP2
POP DX
POP BX
POP AX
RET
DELAY ENDP
END
Write an ALP to rotate stepper motor in both ANTICLOCKWISE and CLOCKWISE
directions
.MODEL SMALL
.DATA
PA EQU 0D880h
PB EQU 0D881h
PC EQU 0D882h
CWR EQU 0D883h
N DW 200
.CODE
MOV AX,@DATA
MOV DS,AX
MOV DX,CWR
MOV AL,80h
OUT DX,AL
MOV CX,N
MOV DX,PC
MOV AL,88h
UP: OUT DX,AL
PUSH CX
CALL DELAY
ROL AL,01h
POP CX
DEC CX
LOOP UP
MOV CX,N
UP3: OUT DX,AL
PUSH CX
CALL DELAY
ROR AL,01h
POP CX
DEC CX
LOOP UP3
MOV AH,4Ch
INT 21h
DELAY PROC NEAR
PUSH AX
PUSH BX
PUSH DX
MOV CX,0FFFh
UP2: MOV AX,0FFFFh
UP1: DEC AX
JNZ UP1
LOOP UP2
POP DX
POP BX
POP AX
RET
DELAY ENDP
END
LOGIC CONTROLLER:-
Write an ALP to find number of 1’s and 0’s using logic controller
.MODEL SMALL
.DATA
PA EQU 0D880h
PB EQU 0D881h
PC EQU 0D882h
CWR EQU 0D883h
.CODE
MOV AX,@DATA
MOV DS,AX
MOV AL,82h
MOV DX,CWR
OUT DX,AL
MOV DX,PB
IN AL,DX
MOV CL,08h
MOV BL,00h
MOV BH,00h
L2: ROL AL,01h
JNC L1
INC BL
JMP L3
L1: INC BH
L3: DEC CL
JNZ L2
MOV AL,BL
MOV DX,PA
OUT DX,AL
MOV DX,PC
MOV AL,BH
OUT DX,AL
MOV AH,4Ch
INT 21h
END
Write an ALP to realize the operation of JOHNSON COUNTER using logic controller
.MODEL SMALL
.DATA
PA EQU 0D880h
PB EQU 0D881h
PC EQU 0D882h
CWR EQU 0D883h
.CODE
MOV AX,@DATA
MOV DS,AX
MOV DX,CWR
MOV AL,80h
OUT DX,AL
MOV AL,01h
MOV CL,12h
MOV DX,PA
L1: OUT DX,AL
PUSH CX
CALL DELAY
XOR AL,01h
ROR AL,01h
POP CX
DEC CL
JNZ L1
EXIT: MOV AH,4Ch
INT 21h
DELAY PROC NEAR
MOV BX,0DBFFh
L4: MOV CX,0FFFFh
L2: DEC CX
JNZ L2
DEC BX
JNZ L4
RET
DELAY ENDP
END
Write an ALP to realize the operation of RING COUNTER using logic controller
.MODEL SMALL
.DATA
PA EQU 0D880h
PB EQU 0D881h
PC EQU 0D882h
CWR EQU 0D883h
.CODE
MOV AX,@DATA
MOV DS,AX
MOV DX,CWR
MOV AL,80h
OUT DX,AL
MOV AL,01h
MOV CL,08h
MOV DX,PA
L1: OUT DX,AL
PUSH CX
CALL DELAY
ROR AL,01h
POP CX
DEC CL
JNZ L1
EXIT: MOV AH,4Ch
INT 21h
DELAY PROC NEAR
MOV BX,0DBFFh
L4: MOV CX,0FFFFh
L2: DEC CX
JNZ L2
DEC BX
JNZ L4
RET
DELAY ENDP
END
Write an ALP to realize the operation of BCD UP/DOWN COUNTER using logic controller
BCD UP COUNTER:-
.MODEL SMALL
.DATA
PA EQU 0D880h
PB EQU 0D881h
PC EQU 0D882h
CWR EQU 0D883h
.CODE
MOV AX,@DATA
MOV DS,AX
MOV DX,CWR
MOV AL,80h
OUT DX,AL
MOV AL,00h
MOV DX,PA
L1: OUT DX,AL
CALL DELAY
ADD AL,01h
DAA
CMP AL,99h
JBE L1
EXIT: MOV AH,4Ch
INT 21h
DELAY PROC NEAR
MOV BX,0DBFFh
L4: MOV CX,0FFFFh
L2: DEC CX
JNZ L2
DEC BX
JNZ L4
RET
DELAY ENDP
END
BCD DOWN COUNTER:-
.MODEL SMALL
.DATA
PA EQU 0D880h
PB EQU 0D881h
PC EQU 0D882h
CWR EQU 0D883h
.CODE
MOV AX,@DATA
MOV DS,AX
MOV DX,CWR
MOV AL,80h
OUT DX,AL
MOV AL,99h
MOV DX,PA
L1: OUT DX,AL
CALL DELAY
SUB AL,01h
DAS
CMP AL,00h
JA L1
EXIT: MOV AH,4Ch
INT 21h
DELAY PROC NEAR
MOV BX,0DBFFh
L4: MOV CX,0FFFFh
L2: DEC CX
JNZ L2
DEC BX
JNZ L4
RET
DELAY ENDP
END
Write an ALP to realize the operation of BINARY UP/DOWN COUNTER using logic
controller
BINARY UP COUNTER:-
.MODEL SMALL
.DATA
PA EQU 0D880h
PB EQU 0D881h
PC EQU 0D882h
CWR EQU 0D883h
.CODE
MOV AX,@DATA
MOV DS,AX
MOV DX,CWR
MOV AL,80h
OUT DX,AL
MOV AL,00h
MOV DX,PA
L1: OUT DX,AL
CALL DELAY
ADD AL,01h
CMP AL,0FFh
JBE L1
EXIT: MOV AH,4Ch
INT 21h
DELAY PROC NEAR
MOV BX,0DBFFh
L4: MOV CX,0FFFFh
L2: DEC CX
JNZ L2
DEC BX
JNZ L4
RET
DELAY ENDP
END
BINARY DOWN COUNTER:-
.MODEL SMALL
.DATA
PA EQU 0D880h
PB EQU 0D881h
PC EQU 0D882h
CWR EQU 0D883h
.CODE
MOV AX,@DATA
MOV DS,AX
MOV DX,CWR
MOV AL,80h
OUT DX,AL
MOV AL,0FFh
MOV DX,PA
L1: OUT DX,AL
CALL DELAY
SUB AL,01h
CMP AL,00h
JA L1
EXIT: MOV AH,4Ch
INT 21h
DELAY PROC NEAR
MOV BX,0DBFFh
L4: MOV CX,0FFFFh
L2: DEC CX
JNZ L2
DEC BX
JNZ L4
RET
DELAY ENDP
END
Write an ALP to realize the operation of NOT GATE using logic controller
.MODEL SMALL
.DATA
PA EQU 0D880h
PB EQU 0D881h
PC EQU 0D882h
CWR EQU 0D883h
.CODE
MOV AX,@DATA
MOV DS,AX
MOV DX,CWR
MOV AL,82h
OUT DX,AL
MOV DX,PB
IN AL,DX
NOT AL
MOV DX,PA
OUT DX,AL
MOV AH,4Ch
INT 21h
END
Write an ALP to realize the operation of AND GATE using logic controller
.MODEL SMALL
.DATA
MSG DB 10,13,'PRESS ANY KEY:$'
PA EQU 0D880h
PB EQU 0D881h
PC EQU 0D882h
CWR EQU 0D883h
.CODE
MOV AX,@DATA
MOV DS,AX
LEA DX,MSG
MOV AH,09h
INT 21h
MOV DX,CWR
MOV AL,82h
OUT DX,AL
MOV DX,PB
IN AL,DX
MOV BL,AL
MOV AH,01h
INT 21h
MOV DX,PB
IN AL,DX
AND AL,BL
MOV DX,PA
OUT DX,AL
MOV AH,4Ch
INT 21h
END
Write an ALP to realize the operation of OR GATE using logic controller
.MODEL SMALL
.DATA
MSG DB 10,13,'PRESS ANY KEY:$'
PA EQU 0D880h
PB EQU 0D881h
PC EQU 0D882h
CWR EQU 0D883h
.CODE
MOV AX,@DATA
MOV DS,AX
LEA DX,MSG
MOV AH,09h
INT 21h
MOV DX,CWR
MOV AL,82h
OUT DX,AL
MOV DX,PB
IN AL,DX
MOV BL,AL
MOV AH,01h
INT 21h
MOV DX,PB
IN AL,DX
OR AL,BL
MOV DX,PA
OUT DX,AL
MOV AH,4Ch
INT 21h
END
Write an ALP to realize the operation of XOR GATE using logic controller
.MODEL SMALL
.DATA
MSG DB 10,13,'PRESS ANY KEY:$'
PA EQU 0D880h
PB EQU 0D881h
PC EQU 0D882h
CWR EQU 0D883h
.CODE
MOV AX,@DATA
MOV DS,AX
LEA DX,MSG
MOV AH,09h
INT 21h
MOV DX,CWR
MOV AL,82h
OUT DX,AL
MOV DX,PB
IN AL,DX
MOV BL,AL
MOV AH,01h
INT 21h
MOV DX,PB
IN AL,DX
XOR AL,BL
MOV DX,PA
OUT DX,AL
MOV AH,4Ch
INT 21h
END
Write an ALP to solve the following BOOLEAN EXPRESSION using logic controller
Y=ĀB+AB
.MODEL SMALL
.DATA
MSG DB 10,13,'PRESS ANY KEY:$'
PA EQU 0D880h
PB EQU 0D881h
PC EQU 0D882h
CWR EQU 0D883h
.CODE
MOV AX,@DATA
MOV DS,AX
LEA DX,MSG
MOV AH,09h
INT 21h
MOV DX,CWR
MOV AL,82h
OUT DX,AL
MOV DX,PB
IN AL,DX
MOV BL,AL
NOT AL
MOV CL,AL
MOV AH,01h
INT 21h
MOV DX,PB
IN AL,DX
MOV BH,AL
AND AL,BL
MOV CH,AL
AND CL,BH
OR CL,CH
MOV AL,CL
MOV DX,PA
OUT DX,AL
MOV AH,4Ch
INT 21h
END