DS CS的问题
如果 DS=1000 CS=2000 ip=0000那我再1000:0000出输入mov ax,1000
mov ds,ax改变了什么东西 本帖最后由 莫名其妙 于 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 16:39 static/image/common/back.gif
什么也没改变吧 除非你给CS的值修改成1000 要不你看不见你修改的指令你这两句指令修改的是代码段
...
但是 地址上的数据变了 0000000000000000000变成了B800200000000000000000 逻辑上还是神马都木有改变纳,寄存器之类的东西都木有变
物理上这个过程就好像你向1000:0 处写入aaaaaa一样,只改变内存存储的内容
唯一不同的是你写入的mov ax,1000h是可执行的指令,当CS:IP指向此处时便可以正确的执行,而写入aaaaa则不然
你看到的B80010正是mov ax,1000h的机器码即可简单理解为指令在内存中的存储形式 影魔 发表于 2012-3-12 18:06 static/image/common/back.gif
但是 地址上的数据变了 0000000000000000000变成了B800200000000000000000
你用-a命令修改了代码段的1000:0000处的内容 同时相同位置的数据段1000:0000 因为你代码的写入也发生了相应的改变这就是后来为什么有 第六章包含多个段的程序 的内容了 程序怎么看是把他当数据看还是当代码看
你在既能当代码段又是数据段的程序你修改了内容一处内容那么两个段的内容就都会发生改变 如果你还没学到第六章那就先别在这里 纠结了继续看吧~!
页:
[1]