(1)从BUF单元开始存有一字符串(长度<255),编程实现统计该字符串中的ASCII在42H~45H之间的字符个数,并将统计结果以二进制形式显示在屏幕。
.486 DATA SEGMENT USE16 BUF DB 'ABCD' COUNT EQU $-BUF DATA ENDS CODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA BEG: MOV AX,DATA MOV DS,AX MOV BL,0 ;计数 MOV SI,0 MOV CX,COUNT AGA: CMP BUF[SI],42H JB LAST ;低于转移 CMP BUF[SI],45H JA LAST ;高于转移 INC BL LAST: INC SI LOOP AGA MOV CX,8 M2: TEST BL,80H JNZ M3 MOV DL,'0' MOV AH,02H INT 21H JMP M4 M3: MOV DL,'1' MOV AH,02H INT 21H M4: SHL BL,1 LOOP M2 MOV AH,4CH INT 21H CODE ENDS END BEG
(2)用户登录验证程序的实现
程序执行后,给出提示操作,请用户键入用户名和密码;用户在键入密码时,程序不回显键入字符;只有当用户键入的用户名,密码字符串和程序内定的字符串相同时,显示欢迎界面并返回DOS;否则给出提示信息,用户名或密码错误,再次输入。界面颜色自定(彩色或黑白)
.486
DATA SEGMENT USE16
_NAME DB NAME - 1, '1511','$'
_PASSWORD DB PASSWORD - 1, '1212', '$'
BUF_NAME DB 30
DB ?
DB 30 DUP(?)
BUF_PASSWORD DB 30
DB ?
DB 30 DUP(?)
MESG1 DB 'PLEASE INPUTE YOUR NAME: ', '$'
MESG2 DB 'PLEASE INPUTE YOUR PASSWORD: ', '$'
OK DB 0DH, 0AH, '---- WELLCOME ---- ', 0DH, 0AH, '$'
NO DB 0DH, 0AH, 'USERNAME OR PASSWORD ERROR!', 0DH, 0AH, '$'
DATA ENDS
CODE SEGMENT USE16
ASSUME CS:CODE, DS:DATA
BEG: MOV AX, DATA
MOV DS, AX
MOV SS, AX
MOV SP, 0
;GET NAME
AGAIN: MOV AH, 9
MOV DX, OFFSET MESG1
INT 21H
MOV AH, 0AH
MOV DX, OFFSET BUF_NAME
INT 21H
MOV BL, BUF_NAME+1
MOV BH, 0
INC BYTE PTR BUF_NAME+1
MOV SI, OFFSET BUF_NAME + 2
MOV BYTE PTR [BX+SI], '$'
; LINE BREAK
MOV AH, 02H
MOV DL, 0AH
INT 21H
;GET PASSWORD
MOV AH, 9
MOV DX, OFFSET MESG2
INT 21H
MOV DI, 0
MOV BX, OFFSET BUF_PASSWORD + 2
S: MOV AH,08H
INT 21H
MOV BYTE PTR [BX + DI], AL
INC DI
CMP AL, 0DH
JNZ S
MOV AX, DI
MOV BYTE PTR BUF_PASSWORD + 1, AL
MOV BYTE PTR [BX +DI], '$'
CALL CHECK
CMP AX, 0
JZ AGAIN
MOV AH, 4CH
INT 21H
CHECK PROC
MOV SI, OFFSET _NAME
MOV DI, OFFSET BUF_NAME + 1
MOV CX, [SI]
MOV CH, 00H
S0: MOV AL, [SI]
CMP AL, [DI]
JNZ ERROR
INC SI
INC DI
LOOP S0
MOV SI, OFFSET _PASSWORD
MOV DI, OFFSET BUF_PASSWORD + 1
MOV CX, [SI]
MOV CH, 00H
S1: MOV AL, [SI]
CMP AL, [DI]
JNZ ERROR
INC SI
INC DI
LOOP S1
MOV AH, 9
MOV DX, OFFSET OK
INT 21H
MOV AX, 1
JMP OVER
ERROR: MOV AH, 9
MOV DX, OFFSET NO
INT 21H
MOV AX, 0
OVER: RET
CHECK ENDP
CODE ENDS
END BEG