汇编一个小程序,有几句话看不懂求大神指导下
1.编写完整程序,从键盘输入一个字符串STRING,同时,把字符串STRING中的‘&’字符用空格符替代。并显示出代替后的字符串及被代替字符的位置(串扫描).
程序
DATA SEGMENT
STRING DB 8 DUP(?)
ADDR DW?
DATA ENDS
CODE SEGMENT
ASSUME ES:DATA,CS:CODE
START:
MOV AX,DATA
MOV ES,AX
MOV CX,8
MOV DI,0
AGAIN:
MOV AH,01H
INT 21H
MOV STRING【DI】,AL
INC DI
LOOP AGAIN
LEA DI,STRING
MOV CX,8
CLD
MOV AL,26H
REPNZ SCASB
MOV AL,20H
XCHG AL,STRING[DI-1]
MOV BX,8
SUB BX,CX
MOV ADDR,BX。。。。。。。。。这句是求什么???
MOV CX,8
MOV SI,0
REST:
MOV AL,STRING[SI]
MOV DL,AL
MOV AH,02H
INT 21H
INC SI
LOOP REST
ADD BX,30H。。。。。。。。。。。。。这句不懂!!!!!
MOV DL,BL。。。。。。。。。。。。。。???
MOV AH,02H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
汇编 串扫描
[解决办法]
>> MOV ADDR,BX。。。。。。。。。这句是求什么???
BX 是那个字符在 STRING 内的位置吧,这句是将其保存在 ADDR 变量里。这样的话,上面的那个 XCHG 就有问题了,虽然你这里可能是对的,但却是有问题的,XCHG AL, [DI-1] 才对。
>> ADD BX,30H。。。。。。。。。。。。。这句不懂!!!!!
BX 是位置,数值而已,显示的话,要转成相应的字符,比如 1->'1'(31h) 所以是加上 30H ;下面赋于 DL 是由于接着的显示字符功能调用要求待显示的字符是在 DL 里,int21h 的这个功能就是这么规定的。
这些问题,将最后的 exe 程序用 debug 走下,看看那些指令前后相关项的内容,其实是很容易明白的。