首页
社区
课程
招聘
[旧帖] [求助]麻烦大家帮我看看这段代码为什么会出错 0.00雪花
发表于: 2009-2-21 00:14 3212

[旧帖] [求助]麻烦大家帮我看看这段代码为什么会出错 0.00雪花

2009-2-21 00:14
3212
我刚学汇编没多久,看书时有这段代码,我就试着逐条运行,但到了pop ax处就出现错误了。我是在vista里调试的
代码很短的
assume cs:codesg
codesg segment
    mov ax,2000h
    mov ss,ax
    mov sp,0
    add sp,4
    pop ax   《《--  在debug里,-t这个就出现错误了
    pop bx
    push ax
    push bx
    pop ax
    pop bx
    mov ax,4c00h
    int 21h
codesg ends
end

错误是 the NTVEM cpu has encountered an illegal instrus....

但我把add sp,4改成add sp,8就不会出错喔!
这是为什么呢??哪位能教教我啊??谢谢啊

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
有没有人告诉我啊??麻烦~~
2009-2-21 00:37
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
3
有很多人问过, 你找找
DOS很单纯. 若你非得跟作者的Code一样的话, 请在纯DOS机器下测这个

若作者这题只是要读者观察Stack'Reg ... 的变化
你就将 SP 设高一点吧. 不要4, 这么低
不影响你的观察的.
2009-2-21 00:42
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢。但我想知道为什么不能4 啊。。。为什么会出现这种错误
2009-2-21 00:57
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
5
这是 SP=0008 时
0AF0:0000  CD 20 FF 9F 00 9A EE FE-1D F0 4F 03 54 05 8A 03
0AF0:0010  54 05 17 03 54 05 38 04-01 01 01 00 02 FF FF FF

在 pop ax 这一条指令, 按 t 后, SP= 000A

0AF0:0000  1D F0 00 00 01 01 F0 0A-54 05 4F 03 54 05 8A 03
0AF0:0010  54 05 17 03 54 05 38 04-01 01 01 00 02 FF FF FF

看到 00~09 全被更动到了. 纯DOS下是不会这样的.
Ok. 仅管更动到了. 没 Error

分别测试 SP=6'4 重覆上列步骤
6: 没事
4: Error

可猜测出执行t指令期间, SP前的6个bytes 空间其实是有被用到的.
至于用于那里. 我就不知道了.

所以...纯DOS下测吧. 毕竟作者也是纯DOS
2009-2-21 01:07
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
噢噢~~~原来是这样~~谢谢啊~~
2009-2-21 01:11
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
那前6个空间我想是用来保存你每次执行T命令时,都会产生的中断码吧
2009-4-13 15:15
0
游客
登录 | 注册 方可回帖
返回
//