鱼C论坛

 找回密码
 立即注册
查看: 2684|回复: 5

DS CS的问题

[复制链接]
发表于 2012-3-12 14:48:50 | 显示全部楼层 |阅读模式
1鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-3-12 14:51:27 | 显示全部楼层
如果 DS=1000 CS=2000 ip=0000
那我再1000:0000出输入mov ax,1000
                                   mov ds,ax改变了什么东西
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-12 16:39:09 | 显示全部楼层
本帖最后由 莫名其妙 于 2012-3-12 16:45 编辑


什么也没改变吧    除非你给CS的值修改成1000 要不你看不见你修改的指令  你这两句指令修改的是代码段
1000:0000处的内容    下面发的是debug下的内容你看看!!
-r
AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  S
DS=1000  ES=0B25  SS=0B25  CS=2000  IP=0000   NV UP EI
2000:0000 0000          ADD     [BX+SI],AL
-a 1000:0
1000:0000 mov ax,1000
1000:0003 mov ds,ax
1000:0005
-r
AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  S
DS=1000  ES=0B25  SS=0B25  CS=2000  IP=0000   NV UP EI
2000:0000 0000          ADD     [BX+SI],AL                                            
一切都木有改变!~
-r cs
CS 2000    ;  修改CS的值 然后发现刚才修改过的代码
:1000
-r
AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  S
DS=1000  ES=0B25  SS=0B25 CS=1000  IP=0000   NV UP EI
1000:0000 B80010        MOV     AX,1000
-t
AX=1000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000
DS=1000  ES=0B25  SS=0B25 CS=1000 IP=0003   NV UP E
1000:0003 8ED8          MOV     DS,AX
-t
AX=1000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000
DS=1000  ES=0B25  SS=0B25  CS=1000  IP=0005   NV UP E
1000:0005 0000          ADD     [BX+SI],AL
-
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-3-12 18:06:10 | 显示全部楼层
莫名其妙 发表于 2012-3-12 16:39
什么也没改变吧    除非你给CS的值修改成1000 要不你看不见你修改的指令  你这两句指令修改的是代码段
...

但是 地址上的数据变了 0000000000000000000  变成了B800200000000000000000
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-12 21:12:42 | 显示全部楼层
逻辑上还是神马都木有改变纳,寄存器之类的东西都木有变
物理上这个过程就好像你向1000:0   处写入  aaaaaa  一样,只改变内存存储的内容
唯一不同的是你写入的mov ax,1000h是可执行的指令,当CS:IP指向此处时便可以正确的执行,而写入aaaaa则不然
你看到的B80010正是mov ax,1000h的机器码即可简单理解为指令在内存中的存储形式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-13 08:29:01 | 显示全部楼层
影魔 发表于 2012-3-12 18:06
但是 地址上的数据变了 0000000000000000000  变成了B800200000000000000000

你用-a命令修改了代码段的1000:0000处的内容 同时相同位置的数据段1000:0000 因为你代码的写入也发生了相应的改变  这就是后来为什么有 第六章  包含多个段的程序 的内容了 程序怎么看是把他当数据看还是当代码看
你在既能当代码段又是数据段的程序你修改了内容一处内容那么两个段的内容就都会发生改变 如果你还没学到第六章那就先别在这里 纠结了继续看吧~!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-19 22:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表