注册 登录
编程论坛 汇编论坛

关于王爽的汇编语言第四章实验

xiongyun520 发布于 2007-06-11 19:12, 1996 次点击
assume cs:codesg
codesg segment
mov ax,2000H
mov ss,ax
mov sp,0
add sp,4
pop ax
pop bx
push ax
push bx
pop ax
pop bx
mov ax,4c00h
int 21h
codesg ends
end

为什么我用t单步执行到pop ax的时候就显示错误,谁能给个意见,谢谢了,最好能解释下
11 回复
#2
Pants2007-06-11 21:08

因为windows和DOS的运行机制是不一样的
在windows的命令行中debug和在纯DOS中debug是不一样的
windows在安全性方面比DOS更好
在windows中某些内存空间是不能直接访问

建议这个实验跳过,对后面的学习是没有什么影响的。

[此贴子已经被作者于2007-6-11 21:11:23编辑过]

#3
菜鸟上路2007-06-11 21:49
要先PUSH才能POP啊
#4
爱以走远2007-06-11 21:51
ls 说得对  
    
#5
xieriguo2007-06-11 22:57
push,pop 我觉得用得最多的是子程序中,保护寄存器了
#6
Pants2007-06-12 23:28
以下是引用菜鸟上路在2007-6-11 21:49:22的发言:
要先PUSH才能POP啊

pop只是把ss:[sp]中的数据提出来而已
它能否执行与是否有对应的push是没有关系的
最多就是你提出来的数据不是你想要的数据而已

#7
菜鸟上路2007-06-13 12:23

LS说的没错,不过我说的是正确的程序

#8
爱以走远2007-06-13 12:30
以下是引用Pants在2007-6-12 23:28:38的发言:

pop只是把ss:[sp]中的数据提出来而已
它能否执行与是否有对应的push是没有关系的
最多就是你提出来的数据不是你想要的数据而已

但是在开始你没有东西入栈
栈是空栈 就不能出栈拉嘛

#9
菜鸟上路2007-06-13 12:46
很多病毒程序是利用了这一特性,用POP或RET指令来获得自己想要的地址
#10
hkbyest2007-06-14 22:20
pop只是把ss:[sp]中的数据提出来而已
它能否执行与是否有对应的push是没有关系的
最多就是你提出来的数据不是你想要的数据而已


正解

[此贴子已经被作者于2007-6-14 22:22:16编辑过]

#11
hkbyest2007-06-14 22:24

LZ的代码作用只不过是把2000:4和2000:6的内容交换而已,我在XP的虚拟8086模式下编译运行成功,没有错误。

#12
无理取闹2007-07-23 15:01
以下是引用菜鸟上路在2007-6-13 12:46:08的发言:
很多病毒程序是利用了这一特性,用POP或RET指令来获得自己想要的地址
版主对病毒有研究?最近兴趣所在,不知道能不能像版主学习一下这方面的知识呢
1