题目是求一个串中数字字符的个数.下面是代码,错误貌似很多:
DATAS SEGMENT
STRING DW 'I09E3SOS','$' ;error A2084:constant value too large
A1 DW '0','1','2','3','4','5','6','7','8','9'
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
XOR SI,SI
MOV CX,27
MOVSB AX,STRING ;error A2070:invalid instruction operands
LEA BX,A1
L2:SCASB AX ;error A2070:invalid instruction operands
MOV DX,10
L3:CMPSB AX,[BX] ;error A2070:invalid instruction operands
JZ L1
INC BX
DEC DX
JNZ L3
L1:INC SI
DEC CX
JNZ L2
LEA DX,STRING
MOV AH,9
INT 21H
MOV AH,4CH
INT 21H
CODES ENDS
END START
回答的全面给加分
我已经改正了,但是问题好象不出在这里,说是MOVSB,SCASB,CMPSB后面的操作数无效.
追答movsb, scasb, cmpsb是不需要操作数的。
追问书上写得实在是不清楚,再追问一下,这个程序应该怎么改正呢?
追答我改成了不用串指令的,
DATAS SEGMENT
STRING Db 'I09E3SOS','$'
A1 Db '0','1','2','3','4','5','6','7','8','9'
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
mov ah, 0 ; 数字字符个数计数器,初始设为0
lea bx, STRING
checkLoop:
mov al, [bx]
cmp al, '$' ; 到了字符串结尾了没?
je over ;到了
cmp al, '0' ; 是数字字符不:在'0'-'9'范围不?
jb next
cmp al, '9'
ja next
; 是数字字符
inc ah
next:
inc bx
jmp checkLoop
over:
; 此时ah的值就是数字字符的个数
LEA DX,STRING
MOV AH,9
INT 21H
MOV AH,4CH
INT 21H
CODES ENDS
END START