xiongyun520 发表于 2007-6-11 19:12

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

assume cs:codesg<BR>codesg segment<BR>    mov ax,2000H<BR>    mov ss,ax<BR>    mov sp,0<BR>    add sp,4<BR>    pop ax<BR>    pop bx<BR>    push ax<BR>    push bx<BR>    pop ax<BR>    pop bx<BR>    mov ax,4c00h<BR>    int 21h<BR>codesg ends<BR>   end<BR><BR>为什么我用t单步执行到pop ax的时候就显示错误,谁能给个意见,谢谢了,最好能解释下

Pants 发表于 2007-6-11 21:08

<P>因为windows和DOS的运行机制是不一样的<br>在windows的命令行中debug和在纯DOS中debug是不一样的<br>windows在安全性方面比DOS更好<br>在windows中某些内存空间是不能直接访问<br><br>建议这个实验跳过,对后面的学习是没有什么影响的。</P>
[align=right][color=#000066][此贴子已经被作者于2007-6-11 21:11:23编辑过][/color][/align]

菜鸟上路 发表于 2007-6-11 21:49

要先PUSH才能POP啊

爱以走远 发表于 2007-6-11 21:51

ls 说得对  <BR>    

xieriguo 发表于 2007-6-11 22:57

push,pop 我觉得用得最多的是子程序中,保护寄存器了

Pants 发表于 2007-6-12 23:28

<DIV class=quote><B>以下是引用<U>菜鸟上路</U>在2007-6-11 21:49:22的发言:</B><BR>要先PUSH才能POP啊</DIV>
<P>pop只是把ss:[sp]中的数据提出来而已<BR>它能否执行与是否有对应的push是没有关系的<BR>最多就是你提出来的数据不是你想要的数据而已</P>

菜鸟上路 发表于 2007-6-13 12:23

<P>LS说的没错,不过我说的是正确的程序</P>

爱以走远 发表于 2007-6-13 12:30

<DIV class=quote><B>以下是引用<U>Pants</U>在2007-6-12 23:28:38的发言:</B><BR><BR>
<P>pop只是把ss:[sp]中的数据提出来而已<BR>它能否执行与是否有对应的push是没有关系的<BR>最多就是你提出来的数据不是你想要的数据而已</P></DIV>
<P>但是在开始你没有东西入栈  <BR>   栈是空栈  就不能出栈拉嘛    <BR>       </P>

菜鸟上路 发表于 2007-6-13 12:46

很多病毒程序是利用了这一特性,用POP或RET指令来获得自己想要的地址

hkbyest 发表于 2007-6-14 22:20

<DIV class=quote>pop只是把ss:[sp]中的数据提出来而已<br>它能否执行与是否有对应的push是没有关系的<br>最多就是你提出来的数据不是你想要的数据而已</DIV><br><br>正解
[align=right][color=#000066][此贴子已经被作者于2007-6-14 22:22:16编辑过][/color][/align]

hkbyest 发表于 2007-6-14 22:24

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

无理取闹 发表于 2007-7-23 15:01

<DIV class=quote><B>以下是引用<U>菜鸟上路</U>在2007-6-13 12:46:08的发言:</B><BR>很多病毒程序是利用了这一特性,用POP或RET指令来获得自己想要的地址</DIV><FONT style="BACKGROUND-COLOR: #f3f3f3">版主对病毒有研究?最近兴趣所在,不知道能不能像版主学习一下这方面的知识呢[em28]</FONT>

页: [1]

编程论坛