S_J_ 发表于 2013-4-21 10:03:08

小甲鱼汇编视频第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:由于新注册没有多少鱼币,所以不知道怎么给大家奖励,请谅解。(如有建议请提出,谢谢。)

S_J_ 发表于 2013-4-21 10:05:18

对了,我的机子是64位,所以我安装了虚拟机并安装了win7 32。。

1971827035 发表于 2013-4-21 13:32:06

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时自然就不会有了

S_J_ 发表于 2013-4-21 20:47:52

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不能被修改,对吗?

1971827035 发表于 2013-4-21 23:36:47

S_J_ 发表于 2013-4-21 20:47 static/image/common/back.gif
就是说,我的机子的系统ss:0000h所指向的内存单元PSP不能被修改,对吗?

嗯,是的   

五棵木 发表于 2013-4-22 02:04:30

真是难得给力的帖子啊。

q1120455417 发表于 2013-4-22 13:39:53

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中
我按照这个重新测试了一次,但是没报错
—, —应该是他调试时内存有其他软件占用导致的。。。

、_归属 发表于 2013-4-22 19:24:12

重设下cs:ip不就得了,找段空白的内存

jimmy1208 发表于 2013-4-22 20:09:39

无回帖,不论坛,这才是人道。

S_J_ 发表于 2013-4-22 21:36:27

本帖最后由 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,让后就写入代码。难道是机器原因?我看书上说有些程序因为机器不同运行结果也不同,有些是在这一台机子上可以运行在另一台就不能运行。我没试过哎。。

S_J_ 发表于 2013-4-22 22:25:52

谢谢1971827035,q1120455417,、_归属 三位了。
问题解决了,应该就是那个地址被占用或不能修改,我换其他地方都可以存放数据就它不行。谢谢各位了。。:P

1971827035 发表于 2013-4-23 12:30:51

q1120455417 发表于 2013-4-22 13:39 static/image/common/back.gif
SP自减2之后,sp = 0,但是写入内存时是sp:0 到 sp:1 根本就没有写入到 psp中
我按照这个重新测试了一 ...

psp指的是哪段内存知道吗?我没有说写入到了psp。汇编程序的执行跟机器本身就有关系,不要说的那么绝对
页: [1]
查看完整版本: 小甲鱼汇编视频第18集问题3.10有疑问。