用proteus进行汇编报错,但是用MASM For Windows能输出正确结果

Lmdg_theta 2017-10-22 11:00:52
代码都用MASM for Windows 运行无错
用proteus也编译过一个进行3次加法的小程序,能够正常debug

用proteus编码以下的程序,编译成功后,进行debug,
一个问题是显示unknown 1-byte opcode at 0000:0004! 6F,而这个单元存储的是小写字母o的ascii 6F

代码功能,反序存放数据,并把其中的小写字母变成大写字母存放
DATA SEGMENT
ORGIN DB 'The orginal sentence: How are you doing?'
ORG 1000H
FINAL DB 'The vatried sentence:'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV CX,40
MOV AH,2
TP:MOV AL,[SI]
MOV DL,AL
INT 21H
INC SI
LOOP TP
MOV DL,0AH
INT 21H

LEA SI,FINAL
MOV CX,20
FIN:MOV AL,[SI]
MOV DL,AL
INT 21H
LOOP FIN

LEA SI,0016H[ORGIN]
LEA DI,0100H[SI]
MOV CX,18
LP0:CLD
LODSB
CMP AL,61H
JL TRANS
CMP AL,7AH
JG TRANS
SUB AL,20H
TRANS:STD
STOSB
LOOP LP0

INC DI
MOV CX,18
LP1:MOV AL,ES:[DI]
MOV DL,AL
INT 21H
INC DI
LOOP LP1
MOV AH,4CH
INT 21H
CODE ENDS
END START



第二个问题是debug直接从后面的指令进行,然后又跳过了循环,输出错误,debug到最后显示 no source line at PC address
代码如下,只是用来计算数据里面的负数个数并存储到数据的后面:
DATA SEGMENT
STRING DB 3,45H,4FH,0C9H
N EQU 3
DATA ENDS

CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START:MOV AX,DATA
MOV DS,AX
LEA DI,STRING
MOV CX,[DI]
MOV BL,0
MOV CH,0
INC DI
LP0: MOV AL,[DI]
AND AL,80H
JNS LP1
INC BL
LP1: INC DI
LOOP LP1
MOV [DI],BL
MOV AH,4CH
INT 21H
CODE ENDS
END START
所以问题来了,这是软件问题还是代码问题?
...全文
2068 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lmdg_theta 2017-10-24
  • 打赏
  • 举报
回复
一开始不是把data 段内容送入,是指令吧,从0000:0000开始存放字节数据。
我把第一个问题的偏移地址ORG 1000H删除了,就没报这个错了,但是不知道为什么,然后运行完又把第二个单元数据给改了,神奇

第一、二个是用proteus 来debug前后的单元值
第三个图是用MASM for windows 运行出来的结果,所以就是不懂怎么差这么多
zara 2017-10-23
  • 打赏
  • 举报
回复
没用过这个软件,看你说的第一个问题,好像是把前面的数据当指令执行了?是不是要求一开始就得是指令啊,即程序是从 0000 处开始执行,所谓的 BIN 格式?

21,453

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧