first commit
This commit is contained in:
56
Lab/Lab2/material/code.asm
Executable file
56
Lab/Lab2/material/code.asm
Executable 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
|
||||
Reference in New Issue
Block a user