ntvdm cpu 遇到无效的指令 汇编题目
时间:2010-12-06
来源:互联网
;主程序
EXTRN COMPUTE: FAR
PUBLIC COUNT, X, Y, R
;--------------------------------------------------------------
D_SEG SEGMENT
COUNT DW 10H
X DW 10H DUP (?)
Y DW 10H DUP (?)
D_SEG ENDS
;--------------------------------------------------------------
E_SEG SEGMENT
R DW 10H DUP (?)
E_SEG ENDS
;--------------------------------------------------------------
STACK SEGMENT STACK
DB 200 DUP(0)
STACK ENDS
C_SEG SEGMENT
ADDITION PROC FAR
ASSUME CS: C_SEG, DS: D_SEG, ES: E_SEG,SS:STACK
START:
PUSH DS
SUB AX, AX
PUSH AX
MOV AX, D_SEG
MOV DS, AX
MOV AX, E_SEG
MOV ES, AX
CALL FAR PTR COMPUTE ;调用求和子程序
RET
ADDITION ENDP
C_SEG ENDS
;-----------------------------------------------------------------
END ADDITION
***********************************************************************************
;求和子程序
EXTRN COUNT:WORD, X:WORD, Y:WORD, R:WORD
PUBLIC COMPUTE
;-----------------------------------------------------------------
CODESG SEGMENT
ASSUME CS: CODESG
COMPUTE PROC FAR ;不同模块的求和子程序
NEXT:
MOV CX, COUNT
MOV BX, 0
MOV AX, X[BX]
ADD AX, Y[BX]
SUB AX, 3
MOV ES: R[BX], AX
LOOP NEXT
POP AX
POP DS
RET
COMPUTE ENDP
;-----------------------------------------------------------------
CODESG ENDS
;********************************************
END
程序编译正确,运行报错:
ntvdm cpu 遇到无效的指令
CS:0000 IP:0077 OP:f0 37 05 14 02
不知道问题出在哪里, 调试程序main:
-u
13F1:0000 1E PUSH DS
13F1:0001 2BC0 SUB AX,AX
13F1:0003 50 PUSH AX
13F1:0004 B8DD13 MOV AX,13DD
13F1:0007 8ED8 MOV DS,AX
13F1:0009 B8E213 MOV AX,13E2
13F1:000C 8EC0 MOV ES,AX
13F1:000E 9A00000000 CALL 0000:0000
13F1:0013 CB RETF
13F1:0014 0000 ADD [BX+SI],AL
13F1:0016 0000 ADD [BX+SI],AL
13F1:0018 0000 ADD [BX+SI],AL
13F1:001A 0000 ADD [BX+SI],AL
13F1:001C 0000 ADD [BX+SI],AL
13F1:001E 0000 ADD [BX+SI],AL
发现调用子程序的地址是0000:0000,这是系统分配的区域,不知道为什么会这样,大家谁知道帮忙解决下。。。
EXTRN COMPUTE: FAR
PUBLIC COUNT, X, Y, R
;--------------------------------------------------------------
D_SEG SEGMENT
COUNT DW 10H
X DW 10H DUP (?)
Y DW 10H DUP (?)
D_SEG ENDS
;--------------------------------------------------------------
E_SEG SEGMENT
R DW 10H DUP (?)
E_SEG ENDS
;--------------------------------------------------------------
STACK SEGMENT STACK
DB 200 DUP(0)
STACK ENDS
C_SEG SEGMENT
ADDITION PROC FAR
ASSUME CS: C_SEG, DS: D_SEG, ES: E_SEG,SS:STACK
START:
PUSH DS
SUB AX, AX
PUSH AX
MOV AX, D_SEG
MOV DS, AX
MOV AX, E_SEG
MOV ES, AX
CALL FAR PTR COMPUTE ;调用求和子程序
RET
ADDITION ENDP
C_SEG ENDS
;-----------------------------------------------------------------
END ADDITION
***********************************************************************************
;求和子程序
EXTRN COUNT:WORD, X:WORD, Y:WORD, R:WORD
PUBLIC COMPUTE
;-----------------------------------------------------------------
CODESG SEGMENT
ASSUME CS: CODESG
COMPUTE PROC FAR ;不同模块的求和子程序
NEXT:
MOV CX, COUNT
MOV BX, 0
MOV AX, X[BX]
ADD AX, Y[BX]
SUB AX, 3
MOV ES: R[BX], AX
LOOP NEXT
POP AX
POP DS
RET
COMPUTE ENDP
;-----------------------------------------------------------------
CODESG ENDS
;********************************************
END
程序编译正确,运行报错:
ntvdm cpu 遇到无效的指令
CS:0000 IP:0077 OP:f0 37 05 14 02
不知道问题出在哪里, 调试程序main:
-u
13F1:0000 1E PUSH DS
13F1:0001 2BC0 SUB AX,AX
13F1:0003 50 PUSH AX
13F1:0004 B8DD13 MOV AX,13DD
13F1:0007 8ED8 MOV DS,AX
13F1:0009 B8E213 MOV AX,13E2
13F1:000C 8EC0 MOV ES,AX
13F1:000E 9A00000000 CALL 0000:0000
13F1:0013 CB RETF
13F1:0014 0000 ADD [BX+SI],AL
13F1:0016 0000 ADD [BX+SI],AL
13F1:0018 0000 ADD [BX+SI],AL
13F1:001A 0000 ADD [BX+SI],AL
13F1:001C 0000 ADD [BX+SI],AL
13F1:001E 0000 ADD [BX+SI],AL
发现调用子程序的地址是0000:0000,这是系统分配的区域,不知道为什么会这样,大家谁知道帮忙解决下。。。
作者: hm315 发布时间: 2010-12-06
“ntvdm cpu 遇到无效的指令”是因为SP没赋值造成。
“调用子程序的地址是0000:0000”还没仔细看。
“调用子程序的地址是0000:0000”还没仔细看。
作者: shzhfu 发布时间: 2010-12-06
引用 1 楼 shzhfu 的回复:
“ntvdm cpu 遇到无效的指令”是因为SP没赋值造成。
“调用子程序的地址是0000:0000”还没仔细看。
“ntvdm cpu 遇到无效的指令”是因为SP没赋值造成。
“调用子程序的地址是0000:0000”还没仔细看。
请问怎么赋值呢,在哪赋值,我是新手,不是很清楚~
作者: hm315 发布时间: 2010-12-06
出现这类提示,通常是栈的原意
作者: masmaster 发布时间: 2010-12-06
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28