first commit

This commit is contained in:
2025-05-27 16:03:52 +08:00
commit 2d22d07f60
223 changed files with 5842 additions and 0 deletions

56
Lab/Lab2/material/code.asm Executable file
View File

@@ -0,0 +1,56 @@
DATA SEGMENT
CHAR DB 'A'
HINT1 DB 'Please enter a string: $'
HINT2 DB 10, 27H, 'A', 27H, ' occured time: $'
TIMES DB 0
MAXLEN DB 100
LEN DB 0
TABLE DB 100 DUP (0)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV DX, OFFSET HINT1 ; 将HINT1的偏移地址赋给DX准备输出
MOV AH, 9 ; 输出
INT 21H
LEA DX, MAXLEN ; 0AH功能会获取DS:[DX](已定义为MAXLEN)作为输入缓冲区最大容量
MOV AH, 0AH ; 调用0AH功能将输入的字符串长度存入DS:[DX+1](已定义为LEN)
INT 21H ; 将字符串存入从DS:DX+2开始的空间(已定义为TABLE)
CALL CNT ; 统计字符“A”的数量结果在TIMES中
MOV DX, OFFSET HINT2 ; 将HINT2的偏移地址赋给DX准备输出
MOV AH, 9 ; 输出
INT 21H
MOV AL, TIMES
ADD AL, '0' ; TIMES += '0' (将数字信息转换成字符)
MOV DL, AL
MOV AH, 02H ; 显示单个字符
INT 21H
MOV AH,4CH
INT 21H
CNT PROC NEAR
MOV CX, 0
MOV CL, LEN
MOV SI, -1 ; SI是遍历TABLE的下标
MOV AL, CHAR ; 要比较的字符移到AL中(CMP不能比较两个内存单元)
LP:
INC SI
CMP AL, TABLE[SI]
JNE BACK ; 不相等则跳过INC TIMES重新循环
INC TIMES
BACK:
LOOP LP ; LOOP先将CX -= 1然后判断是否为0为0就退出循环
RET
CNT ENDP
CODE ENDS
END START