一个关于汇编程序运行的问题

weeksun23 2010-06-15 08:44:39
这几天编写了一个汇编程序,编译没错,第一次运行也成功,但当运行第二次时就出错(NTVDM CPU has encountered an illegal instruction ),而且当运行MASM EDIT等的指令时 就会卡住不动,这是什么问题呢?求解答!小弟不胜感激!
我的代码:
STA SEGMENT STACK
DW 40H DUP(?)
TOP LABEL WORD
STA ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STA,DS:CODE
;DATA
CSIP DD 0
SUCCESS DB 0AH,0DH,'SUCCESSFULLY!!!!!!!',24H
;DATA ENDS

MAIN PROC FAR
BEGIN:
MOV AX,STA
MOV SS,AX
LEA SP,TOP

PUSH CS
POP DS
MOV AH,35H
MOV AL,21H
INT 21H
MOV WORD PTR CSIP,BX
MOV WORD PTR CSIP+2,ES

PUSH CS
POP DS
MOV DX,OFFSET MYINT
MOV AH,25H
MOV AL,21H
INT 21H

MOV AH,0D1H
INT 21H
MOV AH,0D2H
INT 21H
MOV AH,0D3H
INT 21H
MOV AH,0D4H
INT 21H
MOV AH,0D5H
INT 21H
MOV AH,4CH
INT 21H
MAIN ENDP

;*******************************************
MYINT PROC NEAR
STI
;PUSHF
CMP AH,0D1H
JB L1
CMP AH,0D5H
JB L2
JE L2
L1:;POPF
CLI
JMP CS:CSIP
IRET
L2:PUSH BX
PUSH AX
PUSH DX
PUSH CX
PUSH SI
PUSH DI
PUSH DS
PUSH ES
LEA DX,SUCCESS
MOV AH,9
INT 21H
CLI

POP ES
POP DS
POP DI
POP SI
POP CX
POP DX
POP AX
POP BX
;POPF

IRET
MYINT ENDP
;******************************************

CODE ENDS
END MAIN
...全文
106 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
weeksun23 2010-06-17
  • 打赏
  • 举报
回复
经过我这几天的研究,终于把问题解决了。
原因在于:我修改了int21h的中断向量,使其入口地址指向我的程序,而在程序结束之前没有恢复其原来的入口地址,导致了上述问题。
解决方法1:在程序结束前恢复入口地址
MOV DX,WORD PTR CSIP
MOV DS,WORD PTR CSIP+2
MOV AX,2521H
INT 21H
解决方法2:将该程序改成COM程序,然后使用内存驻留。
weeksun23 2010-06-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 renxu350 的回复:]

楼主的源代码是从哪里来的?
IP能作为目的操作数吗?
[/Quote]

从http://www.iteedu.com/plang/asm/asmhbyychxshj/8-3-22.php这个网站来的
CSIP是我定义的一个数组
你试过运行我这个程序吗?是不是和我说的那样?
renxu350 2010-06-16
  • 打赏
  • 举报
回复
[Quote=引用楼主 weeksun23 的回复:]
MOV WORD PTR CSIP,BX
MOV WORD PTR CSIP+2,ES
[/Quote]

楼主的源代码是从哪里来的?
IP能作为目的操作数吗?
renxu350 2010-06-16
  • 打赏
  • 举报
回复
[Quote=引用楼主 weeksun23 的回复:]
NTVDM CPU has encountered an illegal instruction
[/Quote]

illegal instruction: 非法指令
weeksun23 2010-06-16
  • 打赏
  • 举报
回复
自己顶起!!
masmaster 2010-06-16
  • 打赏
  • 举报
回复
ip当然不能用作操作数啦, 不过还是看不懂, 呵呵
honsunrise 2010-06-16
  • 打赏
  • 举报
回复
楼主的源代码是从哪里来的?
IP能作为目的操作数吗?

21,458

社区成员

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

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