(1)从BUF单元开始存有一字符串(长度<255),编程实现统计该字符串中的ASCII在42H~45H之间的字符个数,并将统计结果以二进制形式显示在屏幕。
<strong>.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 </strong>
(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