mcs-17 sECTION 2 Jan 2011
mcs-17 sECTION 2 Jan 2011
.MODEL SMALL
.STACK 64
DATA SEGMENT
KEY DB 04H
NUM DB 05H
ARRAY DB 05H
DB 04H
DB 03H
DB 02H
DB 01H
MID DB 00H
MSG1 DB 'PRESENT$'
MSG2 DB 'ABSENT$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
MOV DX,0000H
CALL CURSOR
MOV AX,DATA
MOV DS,AX
;Bubble Sort
LIN1: DEC DL
JZ LOUT1
CMP AL,[BX+1]
JS LESS ;ARRAY(I)<ARRAY(I+1)
XCHG AL,[BX+1];
MOV [BX],AL
LESS: INC BX
DEC CL
JNZ LIN2
JMP LIN1
;Display
MOV AH,09H
INT 21H
LEA BX,ARRAY
MOV CH,00H
MOV CL,NUM
DISP1: MOV AL,[BX]
MOV AH,AL
PUSH BX
PUSH CX
CALL SHOW
POP CX
POP BX
INC BX
LOOP DISP1
MOV DX,0200H
CALL CURSOR
LEA DX,MSG4
MOV AH,09H
INT 21H
MOV AL,KEY
MOV AH,AL
CALL SHOW
;Binary Search
MOV DH,00H
JC NFOUND
MOV AX,CX
ADD AX,DX
SHR AX,1
MOV MID,AL
LEA BX,ARRAY
ADD BX,AX
DEC BX
MOV AL,[BX]
CMP AL,KEY
JE FOUND
JC LHALF
MOV DL,MID
DEC DX
JMP LOOP1
MOV CL,MID
INC CX
JMP LOOP1
MOV AH,09H
INT 21H
JMP HALT
INT 21H
INT 21H
;CLEARS SCREEN
MOV BH,07H
MOV CX,0000H
MOV DX,184FH
INT 10H
RET
;SET CURSOR
MOV BH,00H
INT 10H
RET
AND BX,0F00FH
MOV CL,04H
SHR BH,CL
ADD BX,3030H
MOV AH,02H
MOV DL,BH
INT 21H
MOV AH,02H
MOV DL,BL
INT 21H
MOV AH,02H
INT 21H
RET
CODE ENDS
END START
.MODEL SMALL
.STACK 100H
.DATA
.CODE
MAIN PROC
MOV AX, @DATA ; initialize DS
MOV DS, AX
MOV AH, 9
INT 21H
MOV AH, 9
INT 21H
MOV AH, 9
INT 21H
INT 21H
MAIN ENDP
;**************************************************************************;
;**************************************************************************;
;**************************************************************************;
;**************************************************************************;
;**************************************************************************;
;**************************************************************************;
INDEC PROC
; input : none
; uses : MAIN
NEG BX ; negate BX
INDEC ENDP
;**************************************************************************;
OUTDEC PROC
; input : AX
; output : none
; uses : MAIN
DIV BX ; divide AX by BX
INC CX ; increment CX
OUTDEC ENDP
;**************************************************************************;
;--------------------------------------------------------------------------;
;**************************************************************************;
END MAIN
;**************************************************************************;
;**************************************************************************;
;**************************************************************************;
;**************************************************************************;
CODE SEGMENT
MOV AX,DATA
CODE ENDS
DATA SEGMENT
LARGEST DW ?
SMALLEST DW ?
DATA ENDS
END
.MODEL SMALL
.STACK 64
DATA SEGMENT
MAXLEN DB 20
STRLEN DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
MOV DS,AX
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
XCHG BX,DX
CMP AL,[BX]
JNE NOTPAL
XCHG BX,DX
INC BX
DEC DX
LOOP AGAIN
LEA DX,MSG1
INT 21H
JMP HALT
LEA DX,MSG2
INT 21H
INT 21H
;CLEARS SCREEN
MOV BH,07H
MOV CX,0000H
MOV DX,184FH
INT 10H
RET
;SET CURSOR
MOV AH,02H
MOV BH,00H
INT 10H
RET
READ: MOV AH,09H ;display message
LEA DX,MSG
INT 21H
MOV AH,0AH
LEA DX,STRING
INT 21H
RET
LEA DX,STRFLD
INT 21H
RET
CODE ENDS
END START