茗艹莜主 发表于 2014-2-6 11:57:01

还是卡在了第六章!!!

先看代码用DEBUG载入程序后想用D命令查看一下已经写入内存的数据(就是数据段里面的数据) 输入D b90:0显示的数据不对,而输入D ba0:0显示的数据就是对的了。在代码里面我数据段的段地址是不是再DS段里面吗?为什么输入DS段不对而输入栈段的地址就对了呢?

powerpro 发表于 2014-2-6 12:34:34

这界面为啥看着象10年前折腾过的trw2000 ?

wommwo 发表于 2014-2-6 13:06:28

ds和cs相差256.为程序段前缀(PSP),空闲内存区从0-255字节为psp进行通信。我就知道个大概,王爽的汇编语言第四章最后那块有。希望能帮到你,祝新年快乐

茗艹莜主 发表于 2014-2-6 13:18:03

wommwo 发表于 2014-2-6 13:06 static/image/common/back.gif
ds和cs相差256.为程序段前缀(PSP),空闲内存区从0-255字节为psp进行通信。我就知道个大概,王爽的汇编语言 ...

你说的我明白,你没有看懂我的问题。

powerpro 发表于 2014-2-6 23:06:18

是啊,很多东西 不好解决的。

sidfate 发表于 2014-2-8 14:29:44

你用debug调试到哪?

茗艹莜主 发表于 2014-2-8 17:51:14

sidfate 发表于 2014-2-8 14:29 static/image/common/back.gif
你用debug调试到哪?

程序还没运行前。

sidfate 发表于 2014-2-9 13:26:34

茗艹莜主 发表于 2014-2-8 17:51 static/image/common/back.gif
程序还没运行前。

没运行??那堆栈怎么会已经被改写?

oggplay 发表于 2014-2-9 16:04:59

本帖最后由 oggplay 于 2014-2-9 16:45 编辑

仔细看了看,你从SS:SP开始push,跟ES DS段没啥关系

HB无影 发表于 2014-2-11 18:18:57

本帖最后由 HB无影 于 2014-2-11 18:21 编辑

自学新手,书还没有看完,不到之处,还望指教,自行分析 如下!!!首先因为psp的原因,程序的地址为DS+10H,即0BA0开始存放数据、而0B90开始的256个数据是psp的数据所以自然就不会是代码段或堆栈段的数据。紧接着程序从CS:IP开始执行第一条指令,即从0BA2开始执行。
第一条指令即:mov ax,stack;堆栈段的段地址送入ax,你的r命令中的结果显示:mov ax,0BA1,故堆栈段段地址为0BA1。
第四条指令:   mov ax,data;数据段段地址送入ax,你的r命令显示结果应该为:mov ax,0BA0,数据段段地址为OBA0.
原因为代码段,数据段各定义16个字节,且先定义的数据段,在定义堆栈段,所以数据段段地址
为0BA0,堆栈段段地址为0BA1,代码段段地址为0BA2;如果先定义堆栈段,再定义数据段,则堆栈段段地址为0BA0,数据段段地址为0BA1.
自己测试了一下附图如下:




tk2003 发表于 2014-2-11 18:54:15

具体还是看指令,是mov ax,data 这个指令将ds的段值放进去,所以你要看你的ds段在哪里,准确的方式还是运行mov ax,data 之后再看

初始的ds,ss,值你可以看成是系统在加载程序之后,所赋给的值,

个人觉得不必纠结于此吧!
页: [1]
查看完整版本: 还是卡在了第六章!!!