小甲鱼汇编视频第18集问题3.10有疑问。
本帖最后由 S_J_ 于 2013-4-22 22:26 编辑各位前辈您们好: 我在看小甲鱼的汇编语言视频,如题的疑问。
问题如下:
在10000H处,写入字型数据2266H。要求:不能使用”MOV内存单元,寄存器“这类指令。
代码如下:
mov ax, 1000
mov ss, ax
mov sp, 2
mov ax, 2266
push ax
疑问如下:
我用win7 32位系统编辑环境,cmd\debug,用 t 命令跟踪到mov ax,2266 下一步就崩溃。试了好几次都是这样,不知道是怎么回事??? 我把SP改为0,之后能运行,push之后SP为FFFE,但是SP不是不应该为0吗??SP为2为什么就不行呢?
附图:
PS:由于新注册没有多少鱼币,所以不知道怎么给大家奖励,请谅解。(如有建议请提出,谢谢。)
对了,我的机子是64位,所以我安装了虚拟机并安装了win7 32。。 mov sp, 2
mov ax, 2266 ;输入t命令时,push ax指令要会被执行
push ax
当sp=2时,在执行push ax的时候,需进行两部操作,一、sp自减2二、将ss:sp指向的内存单元的内容替换为ax中的内容。而此时ss:sp是指向ss:0000h单元的。我们知道,一个程序段的前256个字节(00-0ffh)的内容是psp(程序段前缀,存放程序的一些信息),有些系统的这段内容是能够随意修改的,可以通过一些指令来进行访问。但此时ss:0000h所指向的内存单元恰恰是psp的内容。所以系统会有那个提示。当sp=0时自然就不会有了 1971827035 发表于 2013-4-21 13:32 static/image/common/back.gif
mov sp, 2
mov ax, 2266 ;输入t命令时,push ax指令要会被执行
push ax
就是说,我的机子的系统ss:0000h所指向的内存单元PSP不能被修改,对吗? S_J_ 发表于 2013-4-21 20:47 static/image/common/back.gif
就是说,我的机子的系统ss:0000h所指向的内存单元PSP不能被修改,对吗?
嗯,是的 真是难得给力的帖子啊。 1971827035 发表于 2013-4-21 13:32 static/image/common/back.gif
mov sp, 2
mov ax, 2266 ;输入t命令时,push ax指令要会被执行
push ax
SP自减2之后,sp = 0,但是写入内存时是sp:0 到 sp:1 根本就没有写入到 psp中
我按照这个重新测试了一次,但是没报错
—, —应该是他调试时内存有其他软件占用导致的。。。 重设下cs:ip不就得了,找段空白的内存 无回帖,不论坛,这才是人道。 本帖最后由 S_J_ 于 2013-4-22 21:58 编辑
q1120455417 发表于 2013-4-22 13:39 static/image/common/back.gif
SP自减2之后,sp = 0,但是写入内存时是sp:0 到 sp:1 根本就没有写入到 psp中
我按照这个重新测试了一 ...
额,我用都是虚拟机,在虚拟机里操作的,没开什么程序。就是直接运行\debug,让后就写入代码。难道是机器原因?我看书上说有些程序因为机器不同运行结果也不同,有些是在这一台机子上可以运行在另一台就不能运行。我没试过哎。。 谢谢1971827035,q1120455417,、_归属 三位了。
问题解决了,应该就是那个地址被占用或不能修改,我换其他地方都可以存放数据就它不行。谢谢各位了。。:P q1120455417 发表于 2013-4-22 13:39 static/image/common/back.gif
SP自减2之后,sp = 0,但是写入内存时是sp:0 到 sp:1 根本就没有写入到 psp中
我按照这个重新测试了一 ...
psp指的是哪段内存知道吗?我没有说写入到了psp。汇编程序的执行跟机器本身就有关系,不要说的那么绝对
页:
[1]