You are on page 1of 11

1.

Sort an array of signed integers and search for the presence of an item in the sorted array using binary search
.MODEL SMALL .STACK 64 DATA SEGMENT KEY DB NUM DB ARRAY DB DB DB DB DB MID MSG1 MSG2 MSG3 MSG4 DATA CODE START:

04H 05H 05H 04H 03H 02H 01H

DB 00H DB 'PRESENT$' DB 'ABSENT$' DB 'SORTED LIST > $' DB 'KEY > $' ENDS SEGMENT ASSUME CS:CODE,DS:DATA CALL CLS MOV DX,0000H CALL CURSOR MOV AX,DATA MOV DS,AX ;Bubble Sort MOV DL,NUM ;counter1 DEC DL JZ LOUT1 MOV CL,DL ;counter2 LEA BX,ARRAY ;pointer to first number MOV AL,[BX] CMP AL,[BX+1] JS LESS ;ARRAY(I)<ARRAY(I+1) XCHG AL,[BX+1]; MOV [BX],AL INC BX DEC CL JNZ LIN2 JMP LIN1 ;Display LEA DX,MSG3 MOV AH,09H INT 21H

LIN1:

LIN2:

LESS:

LOUT1:

2. Given a string of characters terminated by 00H, determine if it is a palindrome. If 'Yes' output the message " The given string is a palindrome. If 'No' output the message "No, it is not a palindrome" .MODEL SMALL .STACK 64 DATA MSG MSG1 MSG2 STRING MAXLEN STRLEN STRFLD DATA CODE START: SEGMENT DB 'ENTER STRING TO BE CHECKED FOR PALINDROME > $' DB 'YES ,A PALINDROME $' DB 'NOT A PALINDROME $' LABEL BYTE DB 20 DB ? DB 20 DUP(' ') ENDS SEGMENT ASSUME CS:CODE,DS:DATA MOV AX,DATA MOV DS,AX CALL CLS CALL CURSOR CALL READ CALL CLS CALL CURSOR LEA BX,STRFLD MOV CH,00H MOV CL,STRLEN CMP CX,02H JC PAL MOV DX,BX ADD DX,CX DEC DX SHR CX,1 AGAIN: MOV AL,[BX] XCHG BX,DX CMP AL,[BX] JNE NOTPAL XCHG BX,DX INC BX DEC DX LOOP AGAIN MOV LEA INT JMP AH,09H DX,MSG1 21H HALT ;clear screen ;set cursor at (0,0)

PAL:

NOTPAL: MOV AH,09H LEA DX,MSG2 INT 21H HALT: MOV AX,4C00H INT 21H ;CLEARS SCREEN ;terminate program

CLS:

MOV MOV MOV MOV INT RET

AX,0600H BH,07H CX,0000H DX,184FH 10H

;SET CURSOR CURSOR: MOV DX,0000H MOV AH,02H MOV BH,00H INT 10H RET READ: MOV AH,09H LEA DX,MSG INT 21H MOV AH,0AH LEA DX,STRING INT 21H RET WRITE: MOV AH,09H LEA DX,STRFLD INT 21H RET ENDS END START ;display message

CODE

3. Find the factorial of a given integer using a recursive procedure. .MODEL SMALL .STACK 64 DATA MSG1 NUM MSG2 MSG3 DATA CODE START: SEGMENT DB 'ENTER A DIGIT > $' DB 00H DB '!=(hexadecimal) $' DB 'INVALID INPUT or OVERFLOW $' ENDS SEGMENT ASSUME CS:CODE,DS:DATA CALL CLS ;clears screen MOV DX,0000H CALL CURSOR ;set cursor at (0,0) for number MOV AX,DATA MOV DS,AX CALL INPUT CALL CLS MOV DX,0000H CALL CURSOR CMP JC CMP JNC SUB NUM,30H INVALID NUM,39H INVALID NUM,30H

MOV CL,NUM MOV CH,00H MOV AX,0001H CALL FACT PUSH AX MOV AL,NUM CALL PCHAR MOV DX,0001H CALL CURSOR LEA DX,MSG2 MOV AH,09H INT 21H POP AX PUSH AX AND AX,0F000H MOV CL,0CH SHR AX,CL CALL PCHAR MOV DX,0012H CALL CURSOR POP AX PUSH AX AND AX,0F00H MOV AL,AH CALL PCHAR MOV DX,0013H CALL CURSOR POP AX PUSH AX AND AX,00F0H MOV CL,04H SHR AX,CL CALL PCHAR MOV DX,0014H CALL CURSOR POP AX AND AX,000FH CALL PCHAR JMP HALT INVALID:LEA MOV INT HALT: MOV INT CLS: DX,MSG3 AH,09H 21H AX,4C00H 21H

;CX=NUM ;AX=1 (AX used to hold factorial value) ;print number ;set cursor at (1,0) for message

;first digit ;print first digit ;set cursor at (18,0) for digit2

;second digit ;print second digit ;set cursor at (19,0) for digit3

;third digit ;print third digit ;set cursor at (20,0) for digit4 ;fourth digit ;print fourth digit

;terminate digit

;CLEARS SCREEN MOV AX,0600H MOV BH,07H MOV CX,0000H MOV DX,184FH INT 10H RET

;SETS CURSOR POSITION AT (DL,DH) CURSOR: MOV AH,02H MOV BH,00H INT 10H RET INPUT: LEA DX,MSG1

MOV AH,09H INT 21H MOV AH,01H INT 21H MOV NUM,AL RET FACT: CMP CX,02H JC EXIT PUSH CX DEC CX CALL FACT POP CX MUL CX RET ;PRINTS CHARACTER AT CURRENT CURSOR POSITION ADD AL,30H CMP AL,3AH JC L1 ADD AL,07H MOV AH,09H MOV BX,0007H MOV CX,01H INT 10H RET ENDS END START

EXIT: PCHAR:

L1:

CODE

4. Display the ASCII characters set on the screen using DOS int10h .MODEL SMALL .STACK 64 DATA NUM DATA CODE START: SEGMENT DB 00H ENDS SEGMENT ASSUME CS:CODE,DS:DATA MOV AX,DATA ;initialize Data Segment register MOV DS,AX CALL CLS ;clear screen MOV CX,0100H ;counter=256(number of ascii characters) MOV DX,0000H ;cursor at top-left corner PUSH CX PUSH DX CALL CURSOR ;cursor set for d1 MOV AL,NUM AND AL,0F0H MOV CL,04H SHR AL,CL ;higher nibble of ascii index ADD AL,30H CMP AL,3AH JC L1 ADD AL,07H ;ascii equivalent of higher nibble CALL PCHAR ;print higher nibble POP DX INC DL

AGAIN:

L1:

L2:

L3:

PUSH DX CALL CURSOR MOV AL,NUM AND AL,0FH ADD AL,30H CMP AL,3AH JC L2 ADD AL,07H CALL PCHAR POP DX ADD DL,02H PUSH DX CALL CURSOR MOV AL,NUM CALL PCHAR POP DX POP CX ADD DL,02H CMP DL,50H JC L3 MOV DL,00H INC DH INC NUM LOOP AGAIN MOV AX,4C00H INT 21H ;CLEARS SCREEN MOV AX,0600H MOV BH,07H MOV CX,0000H MOV DX,184FH INT 10H RET

;cursor set for d2 ;lower nibble of ascii index

;ascii equivalent of lower nibble ;print lower nibble

;cursor set for ascii character ;print ascii character

;new line ;NUM holds next ascii character ;terminate program

CLS:

;SETS CURSOR POSITION AT (DL,DH) CURSOR: MOV AH,02H MOV BH,00H INT 10H RET PCHAR: ;PRINTS CHARACTER AT CURRENT CURSOR POSITION MOV AH,09H MOV BX,0007H MOV CX,01H INT 10H RET ENDS END START

CODE

5. Accept names from keyboard and display them on the screen using Int21h .MODEL SMALL .STACK 64 DATA NUM DATA CODE SEGMENT DB 00H ENDS SEGMENT ASSUME CS:CODE,DS:DATA

START:

AGAIN:

L1:

L2:

L3:

MOV AX,DATA MOV DS,AX CALL CLS MOV CX,0100H MOV DX,0000H PUSH CX PUSH DX CALL CURSOR MOV AL,NUM AND AL,0F0H MOV CL,04H SHR AL,CL ADD AL,30H CMP AL,3AH JC L1 ADD AL,07H CALL PCHAR POP DX INC DL PUSH DX CALL CURSOR MOV AL,NUM AND AL,0FH ADD AL,30H CMP AL,3AH JC L2 ADD AL,07H CALL PCHAR POP DX ADD DL,02H PUSH DX CALL CURSOR MOV AL,NUM CALL PCHAR POP DX POP CX ADD DL,02H CMP DL,50H JC L3 MOV DL,00H INC DH INC NUM LOOP AGAIN MOV AX,4C00H INT 21H ;CLEARS SCREEN MOV AX,0600H MOV BH,07H MOV CX,0000H MOV DX,184FH INT 10H RET

;initialize Data Segment register ;clear screen ;counter=256(number of ascii characters) ;cursor at top-left corner ;cursor set for d1

;higher nibble of ascii index

;ascii equivalent of higher nibble ;print higher nibble

;cursor set for d2 ;lower nibble of ascii index

;ascii equivalent of lower nibble ;print lower nibble

;cursor set for ascii character ;print ascii character

;new line ;NUM holds next ascii character ;terminate program

CLS:

;SETS CURSOR POSITION AT (DL,DH) CURSOR: MOV AH,02H MOV BH,00H INT 10H RET PCHAR: ;PRINTS CHARACTER AT CURRENT CURSOR POSITION MOV AH,09H

CODE

MOV BX,0007H MOV CX,01H INT 10H RET ENDS END START

6. Using BIOS software interrrupts for video services, write a program to draw a rectangle on the screen given the diagonal co-ordinates .MODEL SMALL .STACK 64 DATA SEGMENT MSG DB 'ENTER(xleft,ytop,xright,ybottom) OF RECTANGLE > $' TEN DB 0AH XL DW 00H YT DW 00H XR DW 00H YB DW 00H POINTS LABEL BYTE MAXPLEN DB 20 PLEN DB ? POINTSFLD DB 20 DUP(' ') DATA ENDS CODE START: SEGMENT ASSUME CS:CODE,DS:DATA MOV AX,DATA MOV DS,AX CALL CLS CALL CURSOR CALL INPUT CALL CONVERT MOV AH,0FH INT 10H PUSH AX CALL SETMODE CALL DRAW CALL GETCH POP AX MOV AH,00H INT 10H MOV AX,4C00H INT 21H CLS: ;CLEARS SCREEN MOV AX,0600H MOV BH,07H MOV CX,0000H MOV DX,184FH INT 10H RET

;SET CURSOR CURSOR: MOV DX,0000H

MOV AH,02H MOV BH,00H INT 10H RET INPUT: ;READ CO-ORDINATES STRING MOV AH,09H LEA DX,MSG INT 21H MOV AH,0AH LEA DX,POINTS INT 21H RET ;SAVES INTEGER VALUES OF CO-ORDINATES INTO XL,YT,XR,YB FIELDS CONVERT:LEA SI,POINTSFLD MOV CL,PLEN NEXTNUM:MOV AX,0000H NEXTDIG:MOV DL,[SI] CMP DL,' ' JE BLANK MUL TEN MOV DH,00H SUB DL,30H ADD AX,DX INC SI DEC CL JNZ NEXTDIG JZ SAVE BLANK: INC SI PUSH AX DEC CL JNZ NEXTNUM SAVE: LEA BX,YB MOV [BX],AX ;yb SUB BX,02H POP AX MOV [BX],AX ;xr SUB BX,02H POP AX MOV [BX],AX ;yt SUB BX,02H POP AX MOV [BX],AX ;xl RET SETMODE:MOV MOV INT MOV MOV MOV INT RET DRAW: AH,00H AL,04H 10H AH,0BH BH,07 BL,02 10H

;DRAWS RECTANGLE MOV CX,XL MOV DX,YT CALL DROW MOV CX,XL

MOV DX,YB CALL DROW MOV CX,XL MOV DX,YT CALL DCOL MOV CX,XR MOV DX,YT CALL DCOL RET DROW: L1: ;DRAWS HORIZONTAL EDGE OF RECTANGLE MOV AH,0CH MOV AL,01H INT 10H INC CX CMP CX,XR JNE L1 RET ;DRAWS VERTICAL EDGE OF RECTANGLE MOV AH,0CH MOV AL,01H INT 10H INC DX CMP DX,YB JNE L2 RET ;GET CHARACTER FROM KEYBOARD MOV AH,10H INT 16H RET ENDS END START

DCOL: L2:

GETCH:

CODE

You might also like