aa66foxmail 发表于 2013-5-10 22:50:42

菜鸟上路求解答


如图他的地址在10000H
我在写入完毕
为什么我可以在cs指向的地址可以输入代码,而且效果还不变,不应该是在1000 这里开始输入代码吗?

想学IT 发表于 2013-5-10 22:50:43

aa66foxmail 发表于 2013-5-11 11:37 static/image/common/back.gif
我的问题如图 其实我想问的就是这个问题 为什么可以在037f:100 可以输入汇编代码

其实很简单:你在037F:0100输入的指令,他们的地址为CS:IP,你看,你在-r时的CS、IP就是你输入指令时的地址……而你在1000:0输入数据时并没有改变CS、IP的值啊~·

aa66foxmail 发表于 2013-5-10 22:58:07

难道mov ax,1000就是从1000开始 么

wocaoni 发表于 2013-5-10 23:27:32

他把1000赋予给了段地址,因为不能把1000直接放到ds中,要通过寄存器ax做中介。其实我不懂你要问什么,反正就是这么个道理- -

熊文杰 发表于 2013-5-11 01:04:10

每台明白楼主想问的是什么?ds是数据段,代码一般都是放在cs段,这段代码的意思是指定1000h为ds段地址,然而代码本身所占的空间就不是地址了。

aa66foxmail 发表于 2013-5-11 11:37:54

我的问题如图 其实我想问的就是这个问题 为什么可以在037f:100 可以输入汇编代码

wocaoni 发表于 2013-5-11 13:11:02

aa66foxmail 发表于 2013-5-11 11:37 static/image/common/back.gif
我的问题如图 其实我想问的就是这个问题 为什么可以在037f:100 可以输入汇编代码

为什么不可以,在不报错的情况下,你想写在哪里就在哪里。

wocaoni 发表于 2013-5-11 13:21:16

aa66foxmail 发表于 2013-5-11 11:37 static/image/common/back.gif
我的问题如图 其实我想问的就是这个问题 为什么可以在037f:100 可以输入汇编代码

你能明白你写的代码所占用的地址,跟你代码里面那个地址是两回事就好了。代码里面是说要把存放在ds:之中的数据保存在寄存器之中,当然执行完之后你ds:里面的内容肯定不会变。我估计你是还弄不明白代码段和数据段的概念,才会这么问。

围巢 发表于 2013-5-11 22:48:37

ax,bx,cx.....这是通用寄存器,而ds是段寄存器,地址不能直接到段寄存器,而是用通用寄存器地址储存起来,再交给DS,

围巢 发表于 2013-5-11 23:06:38

为什么不可以,你的起始位置是037f:1000,那么你写的命令也只能从037f:1000开始执行,可以改一下起始地址:
r ds
Ds:XXXX
:037f
r ip
IP : XXXX
:0100
然后用D命令排列
D 037F:0100
......用同理的方法改为1000
file:///C:/Users/jh/AppData/Roaming/Tencent/Users/981577696/QQ/WinTemp/RichOle/D999TR7R

围巢 发表于 2013-5-11 23:08:15

就是这个

☆小韦QQ 发表于 2013-5-11 23:59:12

我想楼主是把debug和编译器弄混了吧~~!

hide2may 发表于 2013-5-12 07:40:31

楼主加油,鱼C加油!我们都看好你哦!

aa66foxmail 发表于 2013-5-12 13:39:00

谢谢大家,我也弄明白了 好好复习了下基础知识 谢谢大家

小靚同学Leon 发表于 2013-5-13 09:42:13

加油吧,楼主啊

540167078 发表于 2013-5-13 17:51:54

我只是路过打酱油的。

想学IT 发表于 2013-5-17 18:31:52

ds是数据段,存放的是数据;而cs是代码段,存放的是指令啊。而你写指令是在代码段写的------和数据存储搭不上边啊。也就是说:只要你不让代码与数据地址相重合,他们就在两个空间互不干扰!
页: [1]
查看完整版本: 菜鸟上路求解答