简单汇编程序 我错在那里呢?指点我下 谢谢 有追加分

来源:百度知道 编辑:UC知道 时间:2024/06/28 22:41:14
这个程序可以运行,但是结果却是一屏幕乱码,我错在那里了呢?请高人指点。解决后显示正确结果追加分 谢谢
功能是 把定义字符串中的剔除 即HOW ARE YOU 变成HOWAREYOU
DSEG SEGMENT
DATA1 DB'HOW ARE YOU',0
DATA2 DB 11 DUP(?)
DSEG ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DSEG
START:MOV AX,DSEG ;初始化
MOV DS,AX
MOV SI,OFFSET DATA1
MOV DI,OFFSET DATA2

NEXT: OR AL,AL ;判断是否到尾,到则转到ok
JZ OK

MOV AL,[SI] ;扫描定义字符串,把新的结果放入data2
CMP AL,20H
JZ PPP
MOV [DI],AL
INC SI
INC DI
JMP BBB
PPP: INC SI
INC DI
BBB: LOOP NEXT

MOV DX,OFFSET DATA2 ;显示退出
OK:MOV AH,9
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START

修改了你的程序,然后稍微简化了一下。
你的程序出现乱码主要问题在调用9号功能时,字符串DATA2没有以“$”结束。而9号功能显示字符串时是以“$”为结束标志的。
下面这个程序汇编连接成功,运行显示“HOWAREYOU”。
DSEG SEGMENT
DATA1 DB 'HOW ARE YOU',0
DATA2 DB 11 DUP(?)
DSEG ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DSEG
START:MOV AX,DSEG
MOV DS,AX
MOV SI,OFFSET DATA1
MOV DI,OFFSET DATA2

NEXT:
MOV AL,[SI]
or al,al
jz ok
CMP AL,20H
JZ PPP
MOV [DI],AL
INC DI
PPP: INC SI
LOOP NEXT

ok:mov [di],byte ptr "$"
MOV DX,OFFSET DATA2
MOV AH,9
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START