简单汇编程序 我错在那里呢?指点我下 谢谢 有追加分
来源:百度知道 编辑: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
功能是 把定义字符串中的剔除 即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