看看代码有没有问题!

sevenfish 2006-03-14 08:57:14
下面代码编译没问题,在xp下执行出现“ntvdm cpu遇到无效指令”,高手能告诉我是什么问题引起的吗?

DATA SEGMENT
DA1 DB 'THIS IS A SAMPLE PROGRAM.'
DB 0DH,0AH,'$'
DATA ENDS
STACK SEGMENT
ST1 DB 100 DUP(?)
STACK ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,STACK
MOV SS,AX
PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV AH,9
MOV DX,OFFSET DA1
INT 21H
RET
MAIN ENDP
CODE ENDS
END
...全文
163 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
peimichael 2006-03-16
  • 打赏
  • 举报
回复
都是高人阿,学习学习
jixingzhong 2006-03-16
  • 打赏
  • 举报
回复
学习 ~ ^_^
zara 2006-03-16
  • 打赏
  • 举报
回复
start 未定义的问题, 是由于高版本的 Masm 引入了标号的适用范围的概念. 原来的定义模式, start: 这样的, 只能在其定义的模块中使用; 而 start:: 这样的就是全局性质的, 可以任意使用. 所以, 解决这个问题可以将 start: 修改为 start:: 定义方式. 或者是在编译时加上 /Zm 选项, 即采用 Masm5 的兼容模式进行编译, 这个包括缺省的标号都是全局性质的
sevenfish 2006-03-16
  • 打赏
  • 举报
回复
忘了说,原来end后有start的,但编译说它未定义,郁闷下只能删去,编译没问题,就是执行时出错,我找的编译器是masm6.15,压缩包只有几百k,是不是不全的问题,另外是在xp下编译运行的。
zara 2006-03-15
  • 打赏
  • 举报
回复
唉, 既然用 int21h(mov ah, 4ch) 来结束程序并返回到 DOS, 好保留着 push ds\mov ax, 0\push ax 这三条指令做什么呢? 也一并删除了吧
jingbinqweasd 2006-03-15
  • 打赏
  • 举报
回复
DATA SEGMENT
DA1 DB 'THIS IS A SAMPLE PROGRAM.'
DB 0DH,0AH,'$'
DATA ENDS
STACK1 SEGMENT STACK
ST1 DB 100 DUP(?)
STACK1 ENDS
CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK1
START: MOV AX,STACK1
MOV SS,AX
PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV AH,9
MOV DX,OFFSET DA1
INT 21H
MOV AH,4CH
int 21h
CODE ENDS
END START
zara 2006-03-14
  • 打赏
  • 举报
回复
将最后一行的 END 改为 END START 试试
Areslee 2006-03-14
  • 打赏
  • 举报
回复
哈哈
好久不见这个错误,回忆以前偶遇到这个问题的时候还以为是连接器出了问题,每次编译完后手动修改EXE文件入口。:)
后来想清楚之后一个寒啊。
对于代码段不在最前面的程序,在END后加上入口标号是很重要的
大熊猫侯佩 2006-03-14
  • 打赏
  • 举报
回复
1 no only END ,is END some label

2 write exit code ,eg :

mov ah,4ch
int 21h
fhb13 2006-03-14
  • 打赏
  • 举报
回复
楼主把代码改下
DATA SEGMENT
DA1 DB 'THIS IS A SAMPLE PROGRAM.'
DB 0DH,0AH,'$'
DATA ENDS
STACK SEGMENT
ST1 DB 100 DUP(?)
STACK ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DATA,SS:STACK
MOV AX,STACK
MOV SS,AX
PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV AH,9
MOV DX,OFFSET DA1
INT 21H
RET
MAIN ENDP
START:
call main
mov ax,4c00h
int 21h
CODE ENDS
END START

21,497

社区成员

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

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