Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
zman099 said:Geshtar,
how did you end up learning this stuff then? man when i read this book, i end up using google a lot to look up these terms. I want to learn this stuff, but i'm not very good with C.
;
TITLE CMPNAMES (EXE) COMPARES 2 NAMES ENTERED BY A USER AND ASKS TO REPEAT
;**************************************************************************
; PROGRAMMER: CHRIS GARNER
; DATE: 11-14-2005
; DESCRITPION THIS PROGRAM TAKES 2 NAMES IN FROM THE USER,
; COMPARES THEM, AND THEN GIVES OUTPUT ACCORDING TO
; WHETHER THEY MATCH OR NOT. EITHER WAY THE USER HAS
; THE CHOICE TO TRY AGAIN.
;*************************************************************************
.MODEL SMALL
.STACK 1024
;*************************************************************************
.DATA
PROMPT1 DB 'Please enter the first name: $'
PROMPT2 DB 'Please enter the second name: $'
PROMPTSAME DB 'You entered the same name twice. Would you like to enter two more names (Y/N)? $'
PROMPTDIF DB 'You entered 2 different names. Would you like to enter two more names (Y/N)? $'
SAME DB ?
PARLIST1 LABEL BYTE
MAXLENG1 DB 31
ACTLENG1 DB ?
NAME1 DB 32 DUP('*'), '$'
PARLIST2 LABEL BYTE
MAXLENG2 DB 31
ACTLENG2 DB ?
NAME2 DB 32 DUP('*'), '$'
;**************************************************************************
;**************************************************************************
.386
.CODE
MAIN PROC FAR
;SETUP REGISTERS
MOV AX,@data
MOV DS,AX
MOV ES,AX
;START PROGRAM
CALL CLRSCRN ;CLEAR THE SCREEN
CALL SET_CURSOR_1 ;SET CURSOR FOR
CALL PROMPT_FOR_NAME_1 ; FIRST PROMPT
CALL NAME_1_IN ; AND ACCEPT FIRST NAME
CALL SET_CURSOR_2 ;SET CURSOR FOR
CALL PROMPT_FOR_NAME_2 ; FIRST PROMPT
CALL NAME_2_IN ; AND ACCEPT SECOND NAME
CALL COMPARE ;OFF TO THE COMPARISON
CALL SAME_NAMES ;IF THE NAMES ARE EQUAL, CALL THIS PROC
;END PROGRAM
MOV AX,4C00H
INT 21H
MAIN ENDP
;**************************************************************************
;**************************************************************************
CLRSCRN PROC NEAR
PUSHA
MOV AH, 06H ;SCROLL PAGE UP
MOV AL, 00H ;FULL SCREEN SCROLL
MOV BH, 00000111 ;BG = BLACK, FG = GREY
MOV CH, 00D ;TOP LEFT X
MOV CL, 00D ;TOP LEFT Y
MOV DH, 24D ;BOT LEFT X
MOV DL, 79D ;BOT LEFT Y
INT 10H ;MAKE IT HAPPEN
POPA
RET
CLRSCRN ENDP
;-------------------------------------------------------------------------
SET_CURSOR_1 PROC NEAR
PUSHA
MOV AH, 02H ;REQUEST CURSOR SET
MOV BH, 0 ;PAGE NUMBER
MOV DH, 02D ;ROW FOR CURSOR
MOV DL, 00D ;COL FOR CURSOR
INT 10H ;MAKE IT HAPPEN
POPA
RETN
SET_CURSOR_1 ENDP
;--------------------------------------------------------------------------
PROMPT_FOR_NAME_1 PROC NEAR
PUSHA
MOV AH, 09H ;REQUEST DISPLAY
LEA DX, PROMPT1 ;LOAD PROMP1 TO GET READY FOR DISPLAY
INT 21H ;MAKE IT HAPPEN
POPA
RETN
PROMPT_FOR_NAME_1 ENDP
;--------------------------------------------------------------------------
NAME_1_IN PROC NEAR
PUSHA
MOV AH, 0AH ;REQUEST KB INPUT
LEA DX, PARLIST1 ;LOAD ADDY INTO DX
INT 21H ;MAKE IT HAPPEN
POPA
RET
NAME_1_IN ENDP
;-------------------------------------------------------------------------
SET_CURSOR_2 PROC NEAR
PUSHA
MOV AH, 02H ;REQUEST CURSOR SET
MOV BH, 0 ;PAGE NUMBER
MOV DH, 03D ;ROW FOR CURSOR
MOV DL, 00D ;COL FOR CURSOR
INT 10H ;MAKE IT HAPPEN
POPA
RETN
SET_CURSOR_2 ENDP
;--------------------------------------------------------------------------
PROMPT_FOR_NAME_2 PROC NEAR
PUSHA
MOV AH, 09H ;REQUEST DISPLAY
LEA DX, PROMPT2 ;LOAD PROMP1 TO GET READY FOR DISPLAY
INT 21H ;MAKE IT HAPPEN
POPA
RETN
PROMPT_FOR_NAME_2 ENDP
;--------------------------------------------------------------------------
NAME_2_IN PROC NEAR
PUSHA
MOV AH, 0AH ;REQUEST KB INPUT
LEA DX, PARLIST2 ;LOAD ADDY INTO DX
INT 21H ;MAKE IT HAPPEN
POPA
RET
NAME_2_IN ENDP
;--------------------------------------------------------------------------
COMPARE PROC NEAR
PUSHA
MOV AH, ACTLENG1 ;AH = LENGTH OF NAME1
CMP AH, ACTLENG2 ;COMPARE LENGTHS OF NAMES
JNE DIFFERENT ;JUMP HERE IF LENGTHS ARE NOT EQUAL
JMP COMPARE_LETTERS ;JUMP HERE IF LENGTSH ARE EQUAL
COMPARE_LETTERS:
LEA SI, NAME1 ;SI = NAME1 OFFSET
LEA DI, NAME2 ;DI = NAME2 OFFSET
MOVZX CX, ACTLENG1 ;CX = NAME1'S LENGTH
REPE CMPSB ;REPEAT ON EQUAL BYTES
JNZ DIFFERENT ;IF BYTES ARENT EQUAL, THEN JUMP
JMP END_COMPARE ;IF BYTES ARE ALL EQUAL, RETURN TO MAIN
DIFFERENT:
CALL DIFFERENT ;CALLS PROC TO TELL THEM NAMES ARE NOT EQUAL
END_COMPARE:
POPA
RETN
COMPARE ENDP
;--------------------------------------------------------------------------
DIFFERENT PROC NEAR
PUSHA
MOV AH, 02H ;REQUEST CURSOR SET
MOV BH, 00D ;PAGE NUMBER
MOV DH, 10D ;ROW FOR CURSOR
MOV DL, 00D ;COL FOR CURSOR
INT 10H ;MAKE IT HAPPEN
MOV AH, 09H ;REQUEST DISPLAY
LEA DX, PROMPTDIF ;LOAD PROMPDIF TO GET READY FOR DISPLAY
INT 21H ;MAKE IT HAPPEN
MOV AH, 10H ;REQUEST SINGLE CHAR TO ENTER
INT 16H ;MAKE IT HAPPEN
MOV AH,'Y' ;SET AH = Y
CMP AH,AL ;COMPARE AH TO WHAT THEY ENTERED
JNE CHECK_CASE
CHECK_CASE: ;MAKE IT CASE INSENSITIVE
MOV AH, 'y' ;
CMP AH,AL ;
JE MAIN ;
FINISH:
MOV AH, 02H ;REQUEST CURSOR SET
MOV BH, 00D ;PAGE NUMBER
MOV DH, 23D ;ROW FOR CURSOR
MOV DL, 00D ;COL FOR CURSOR
INT 10H ;MAKE IT HAPPEN
MOV AX, 4C00H
INT 21H
POPA
RETN
DIFFERENT ENDP
;--------------------------------------------------------------------------
SAME_NAMES PROC NEAR
PUSHA
MOV AH, 02H ;REQUEST CURSOR SET
MOV BH, 00D ;PAGE NUMBER
MOV DH, 10D ;ROW FOR CURSOR
MOV DL, 00D ;COL FOR CURSOR
INT 10H ;MAKE IT HAPPEN
MOV AH, 09H ;REQUEST DISPLAY
LEA DX, PROMPTSAME ;LOAD PROMPDIF TO GET READY FOR DISPLAY
INT 21H ;MAKE IT HAPPEN
MOV AH, 10H ;REQUEST SINGLE CHAR TO ENTER
INT 16H ;MAKE IT HAPPEN
MOV AH,'Y' ;SET AH = Y
CMP AH,AL ;COMPARE AH TO WHAT THEY ENTERED
JE MAIN
MOV AH, 02H ;REQUEST CURSOR SET
MOV BH, 00D ;PAGE NUMBER
MOV DH, 23D ;ROW FOR CURSOR
MOV DL, 00D ;COL FOR CURSOR
INT 10H ;MAKE IT HAPPEN
MOV AX,4C00H
INT 21H
POPA
SAME_NAMES ENDP
;**************************************************************************
END MAIN
zman099 said:Geshtar,
how did you end up learning this stuff then? man when i read this book, i end up using google a lot to look up these terms. I want to learn this stuff, but i'm not very good with C.