影魔 发表于 2012-3-12 14:48:50

DS CS的问题

影魔 发表于 2012-3-12 14:51:27

如果 DS=1000 CS=2000 ip=0000
那我再1000:0000出输入mov ax,1000
                                 mov ds,ax改变了什么东西

莫名其妙 发表于 2012-3-12 16:39:09

本帖最后由 莫名其妙 于 2012-3-12 16:45 编辑

影魔 发表于 2012-3-12 14:51 http://bbs.fishc.com/static/image/common/back.gif
如果 DS=1000 CS=2000 ip=0000
那我再1000:0000出输入mov ax,1000
                                 ...

什么也没改变吧    除非你给CS的值修改成1000 要不你看不见你修改的指令你这两句指令修改的是代码段
1000:0000处的内容    下面发的是debug下的内容你看看!!
-r
AX=0000BX=0000CX=0000DX=0000SP=FFEEBP=0000S
DS=1000ES=0B25SS=0B25CS=2000IP=0000   NV UP EI
2000:0000 0000          ADD   ,AL
-a 1000:0
1000:0000 mov ax,1000
1000:0003 mov ds,ax
1000:0005
-r
AX=0000BX=0000CX=0000DX=0000SP=FFEEBP=0000S
DS=1000ES=0B25SS=0B25CS=2000IP=0000   NV UP EI
2000:0000 0000          ADD   ,AL                                          
一切都木有改变!~
-r cs
CS 2000    ;修改CS的值 然后发现刚才修改过的代码
:1000
-r
AX=0000BX=0000CX=0000DX=0000SP=FFEEBP=0000S
DS=1000ES=0B25SS=0B25 CS=1000IP=0000   NV UP EI
1000:0000 B80010      MOV   AX,1000
-t
AX=1000BX=0000CX=0000DX=0000SP=FFEEBP=0000
DS=1000ES=0B25SS=0B25 CS=1000 IP=0003   NV UP E
1000:0003 8ED8          MOV   DS,AX
-t
AX=1000BX=0000CX=0000DX=0000SP=FFEEBP=0000
DS=1000ES=0B25SS=0B25CS=1000IP=0005   NV UP E
1000:0005 0000          ADD   ,AL
-

影魔 发表于 2012-3-12 18:06:10

莫名其妙 发表于 2012-3-12 16:39 static/image/common/back.gif
什么也没改变吧    除非你给CS的值修改成1000 要不你看不见你修改的指令你这两句指令修改的是代码段
...

但是 地址上的数据变了 0000000000000000000变成了B800200000000000000000

cqy55555 发表于 2012-3-12 21:12:42

逻辑上还是神马都木有改变纳,寄存器之类的东西都木有变
物理上这个过程就好像你向1000:0   处写入aaaaaa一样,只改变内存存储的内容
唯一不同的是你写入的mov ax,1000h是可执行的指令,当CS:IP指向此处时便可以正确的执行,而写入aaaaa则不然
你看到的B80010正是mov ax,1000h的机器码即可简单理解为指令在内存中的存储形式

莫名其妙 发表于 2012-3-13 08:29:01

影魔 发表于 2012-3-12 18:06 static/image/common/back.gif
但是 地址上的数据变了 0000000000000000000变成了B800200000000000000000

你用-a命令修改了代码段的1000:0000处的内容 同时相同位置的数据段1000:0000 因为你代码的写入也发生了相应的改变这就是后来为什么有 第六章包含多个段的程序 的内容了 程序怎么看是把他当数据看还是当代码看
你在既能当代码段又是数据段的程序你修改了内容一处内容那么两个段的内容就都会发生改变 如果你还没学到第六章那就先别在这里 纠结了继续看吧~!
页: [1]
查看完整版本: DS CS的问题