城堡破坏者boss攻略:要统计非空格的个数,为何显示成count=x(汇编)

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/02 23:47:31
要统计非空格的个数,为何显示成count=x 应该是count=10才对
SSEG SEGMENT PARA STACK 'stack'
dw 100h dup(0)
SSEG ENDS
DATA SEGMENT
STR1 DB 'How are you?',0DH
STR2 DB 'NUM=',?,'$'
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV AX,SSEG
MOV SS,AX
MOV AL,0
LEA DI,STR1
L1: CMP [DI],WORD PTR 20H
JZ L2
CMP [DI],WORD PTR 0DH
JZ L3
INC DI

L2: INC AL
INC DI
JMP L1
L3: ADD AL,48
LEA DI,STR2
ADD DI,4;
MOV [DI],AL
LEA DX,STR2
MOV AH,9
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
AssemblyF说"在19行加一条JMP L1, 如果不这样,
在不是ODh和20h的循环并没有正常运行"感觉不对啊

sorry, 看错了, 我看成统计空格数量了

SSEG SEGMENT PARA STACK 'stack'
dw 100h dup(0)
SSEG ENDS
DATA SEGMENT
STR1 DB 'How are you',0DH
STR2 DB 'NUM=',?,'$'
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV AX,SSEG
MOV SS,AX
MOV AL,0
LEA DI,STR1
L1: CMP [DI],WORD PTR 20H
;STR1是DB类型的,你为何要用WORD PTR 20H呢?
JZ L2
CMP [DI],WORD PTR 0DH
;错误同上
JZ L3
INC DI

L2: INC AL
INC DI
JMP L1
;你这样写不是在判断,字符数,
;而是在判断空格数
L3: ADD AL,48
LEA DI,STR2
ADD DI,4;
MOV [DI],AL
LEA DX,STR2
MOV AH,9
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START

你的程序最多只可以统计9个字符,在多就会发生错误了
你想想如果al = 10, 加上48会等于什么字符!
所以我把字符串最后的'?'去掉了

下面是改正过的程序:

SSEG SEGMENT PARA STACK 'stack'
dw 100h dup(0)
SSEG ENDS
DATA SEGMENT
STR1 DB 'HOW ARE YOU',0DH
STR2 DB 'NUM=',?,'$'
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV AX,SSEG
MOV SS,AX
MOV AL,0
LEA DI,STR1

L1: CMP [DI],BYTE PTR 20H
JZ L2
CMP [DI],BYTE PTR 0DH
JZ L3
INC AL
INC DI
JMP L1

L2: INC DI
JMP L1

L3: ADD AL,48
LEA DI,STR2
ADD DI,4;
MOV [DI],AL
LEA DX,STR2
MOV AH,09H
INT 21H

MOV AH, 4CH
INT 21H
CODE ENDS
END START