0% found this document useful (0 votes)
66 views9 pages

MPMC Software

Binary search uses a divide and conquer approach to find the position of a target value in a sorted array. It repeatedly divides the search interval in half and checks if the target is in the first or second half by comparing to the middle element of the array. If found, it returns the position, otherwise it continues searching the correct half based on the comparison result. Bubble sort iterates through a list and compares adjacent elements, swapping them if they are in the wrong order. It repeats this process until no swaps are needed, resulting in a sorted list. A palindrome checker program accepts a string as input, reverses the string, and compares it to the original to check if they are equal, indicating it

Uploaded by

Adithya s k
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
66 views9 pages

MPMC Software

Binary search uses a divide and conquer approach to find the position of a target value in a sorted array. It repeatedly divides the search interval in half and checks if the target is in the first or second half by comparing to the middle element of the array. If found, it returns the position, otherwise it continues searching the correct half based on the comparison result. Bubble sort iterates through a list and compares adjacent elements, swapping them if they are in the wrong order. It repeats this process until no swaps are needed, resulting in a sorted list. A palindrome checker program accepts a string as input, reverses the string, and compares it to the original to check if they are equal, indicating it

Uploaded by

Adithya s k
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 9

Binary search

.MODEL SMALL
.DATA
ARR DW 1,2,3,4,5,6,7
LEN DW ($-ARR)/2
MSG1 DB "KEY IS FOUND$"
MSG2 DB "KEY IS NOT FOUND$"
X DW 6
.CODE
MOV AX,@DATA
MOV DS,AX
MOV SI,0000H ; SI is LOW
MOV DI,LEN
ADD DI,DI
SUB DI,2 ;DI is HiGH
RPT: CMP SI,DI ;Comparing SI with DI
JA KNF ; IF SI > DI jump to KNF
MOV AX,X ;AX= key
MOV BX,SI ;BX (MID) = (SI + DI )/2
ADD BX,DI
SHR BX,1
CMP AX,ARR[BX] ; Comparing AX (KEY) With middle element ARR[BX]
JE KF ; if key = middle element jump to KF
JB NEXT ; if KEY < middle element jump to NEXT
MOV SI,BX ; if KEY > middle element low (SI) = mid (bx)+2
ADD SI,2
JMP RPT
NEXT:MOV DI,BX ;if key < mid element high (di)= mid (bx)-2
SUB DI,2
JMP RPT
KF: LEA DX,MSG1 ;display the message "KEY is found"
MOV AH,09H
INT 21H
JMP EXIT ;jump to exit
KNF:LEA DX,MSG2 ;display the message "key is not found"
MOV AH,09H
INT 21H
EXIT: MOV AH,4CH
INT 21H
END
Bubble sort
.MODEL SMALL
.STACK
.DATA
LIST DB 03H,04H,02H,01H,05H
N DW $-LIST
ORDER EQU 0 ;implies ascending order
MSG DB 'THE SORTED ARRAY IS:: $'
.CODE
MOV AX,@DATA
MOV DS,AX
MOV BX,N
DEC BX
NXTPASS:MOV CX,BX
MOV SI,00H
NXTCOMP:MOV AL,LIST[SI]
INC SI
CMP AL,LIST[SI]
IF ORDER EQ 0 ;ascending
JB NEXT
ELSE ;descending
JA NEXT
ENDIF
XCHG AL,LIST[SI]
MOV LIST[SI-1],AL
NEXT:LOOP NXTCOMP
DEC BX
JNZ NXTPASS
LEA DX,MSG
MOV AH,09H
INT 21H
MOV BX,N
MOV SI,00H
AGAIN: MOV AL,LIST[SI]
ADD AL,'0'
MOV DL,AL
MOV AH,02H
INT 21H
MOV AH,02H
MOV DL,' '
INT 21H
INC SI
DEC BX
JNZ AGAIN
MOV AH,4CH
INT 21H
END
Palindrome
DATA SEGMENT
MSG1 DB 10,13,'ENTER ANY STRING :- $'
MSG2 DB 10,13,'ENTERED STRING IS :- $'
MSG3 DB 10,13,'LENGTH OF STRING IS :- $'
MSG4 DB 10,13,'NO, GIVEN STRING IS NOT A PALINDROME $'
MSG5 DB 10,13,'THE GIVEN STRING IS A PALINDROME $'
MSG6 DB 10,13,'REVERSE OF ENTERED STRING IS :- $'
P1 LABEL BYTE
M1 DB 0FFH
L1 DB ?
P11 DB 0FFH DUP ('$')
P22 DB 0FFH DUP ('$')
DATA ENDS
DISPLAY MACRO MSG
MOV AH,9
LEA DX,MSG
INT 21H
ENDM
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
DISPLAY MSG1
LEA DX,P1
MOV AH,0AH
INT 21H
DISPLAY MSG2
DISPLAY P11
DISPLAY MSG3
MOV DL,L1
ADD DL,30H
MOV AH,2
INT 21H
DISPLAY MSG6
LEA SI,P11
LEA DI,P22
MOV DL,L1
DEC DL
MOV DH,0
ADD SI,DX
MOV CL,L1
MOV CH,0

REVERSE:
MOV AL,[SI]
MOV [DI],AL
INC DI
DEC SI
LOOP REVERSE
DISPLAY P22
LEA SI,P11
LEA DI,P22
MOV CL,L1
MOV CH,0
CHECK:
MOV AL,[SI]
CMP [DI],AL
JNE NOTPALIN
INC DI
INC SI
LOOP CHECK
DISPLAY MSG5
JMP EXIT
NOTPALIN:
DISPLAY MSG4
EXIT: MOV AH,4CH
INT 21H
CODE ENDS
END START
4th program
COUT MACRO VAR
MOV AH, 2
MOV DL, VAR
INT 21H
ENDM
.MODEL SMALL
.DATA
N DB 8
R DB 4
RES DB ?
.CODE
MOV AX, @DATA
MOV DS, AX
MOV RES, 0
MOV AH, N
MOV AL, R
CALL NCR;Result Display
MOV AL, N
MOV AH, 0
CALL DISPLAY
COUT 'C'
MOV AL, R
MOV AH, 0
CALL DISPLAY
COUT ' '
COUT '='
COUT ' '
MOV AL, RES
MOV AH, 0
CALL DISPLAY
JMP EOF
NCR PROC NEAR
; r == 0
CMP AL, 0
JE ONE
; r == n
CMP AL, AH
JE ONE
; r == 1
CMP AL, 1
JE EN
MOV BH, AH
DEC BH
; r == n - 1
CMP AL, BH
JE EN
DEC AH
PUSH AX
CALL NCR
POP AX
PUSH AX
DEC AL
CALL NCR
POP AX
RET
ONE:
ADD RES, 1
RET
EN:
ADD RES, AH
RET
NCR ENDP

DISPLAY PROC NEAR


PUSH CX
MOV BX, 10 ;INITIALIZES DIVISOR
MOV DX, 0000H ;CLEARS DX
MOV CX, 0000H ;CLEARS CX
;SPLITTING PROCESS STARTS HERE
L1: MOV DX, 0000H ;CLEARS DX DURING JUMP
DIV BX ;DIVIDES AX BY BX
PUSH DX ;PUSHES DX(REMAINDER) TO STACK
INC CX ;INCREMENTS COUNTER TO TRACK THE NUMBER OF
DIGITS
CMP AX, 0 ;CHECKS IF THERE IS STILL SOMETHING IN AX TO
DIVIDE
JNE L1 ;JUMPS IF AX IS NOT ZERO
L2:
POP DX ;POPS FROM STAK TO DX
ADD DX, 30H ;CONVERTS TO IT'S ASCII EQUIVALENT
MOV AH, 02H
INT 21H ;CALLS DOS TO DISPLAY CHARACTER
LOOP L2 ;LOOPS TILL CX EQUALS ZERO
POP CX
RET
DISPLAY ENDP
EOF:
MOV AH, 4CH
INT 21H
END
5th
.MODEL SMALL
.DATA
MSG1 DB "TIME IS$"
MSG2 DB 10,13,"DATE IS$"
.CODE
MOV AX,@DATA
MOV DS,AX
LEA DX,MSG1; display msg1
MOV AH,09H
INT 21H
MOV AH,2CH; Read system time CH = hours, CL = minutes, DH = seconds
INT 21H
MOV AL,CH; move hours to AL
CALL DISPLAY; call display procedure
MOV AL,CL; move minutes to AL
CALL DISPLAY
MOV AL,DH; Move seconds to DH
CALL DISPLAY
LEA DX,MSG2; display msg2
MOV AH,09H
INT 21H
MOV AH,2AH; Read system date AL = day (sun,mon…) DH =month DL =day CX=
year
INT 21H
MOV BX,DX; save month and day in BX, BH = month BL=day
CALL DISPLAY
MOV AL,BL; move day from BL to AL
CALL DISPLAY
MOV AL,BH; move month from BH to AL
CALL DISPLAY
MOV DL,':' ; display character ‘:’
MOV AH,02H
INT 21H
MOV AX,CX; move year to AX=2017
MOV DX,0; DX=0
MOV BX,10; BX=10
DIV BX; DX: AX / BX  2017 / 10 AX =201 DL =07
MOV CL,DL; move 7 o CL CL =7
MOV DX,0; DX=0
DIV BX; DX: AX / BX  201 / 10 AX=20 DL =01
ADD DL,30H; DL + 30H = 01 + 30H = 31H display 1
MOV AH,02H
INT 21H
MOV DL,CL; DL  CL DL=07
ADD DL,30H ; DL + 30H  07 + 30H = 37H display 7
MOV AH,02H
INT 21H
MOV AH,4CH
INT 21H
DISPLAY PROC
PUSH AX ; save AX in stack
MOV DL,':' ; disaply symbol ‘:’
MOV AH,02H
INT 21H
POP AX ; pop AX from satck
AAM ; convert packed BCD in AL to Unpacked eg. 12  01 02 =AX
MOV DX,AX ; DX= 01 02
ADD DX,3030H; DX + 3030H = 01 02 + 30 30 H = 31 32H  ASCII code of
1&2
XCHG DH,DL ; display character in DH
MOV AH,02H
INT 21H
MOV DL,DH ; display character in DL
MOV AH,02H
INT 21H
RET
DISPLAY ENDP
END

Program 1:
#include<lpc21xx.h>
main()
{
int a=6,b=2,sum,sub,mul,div;
sum=a+b;
sub=a-b;
mul=a*b;
div=a/b;
}
Program 2:
#include<lpc21xx.h>
main()
{
int a=3, b=7, and, or, xor,not;
and=a&b;
or=a|b;
xor=a^b;
not=~a;}

You might also like