鱼C论坛

 找回密码
 立即注册
查看: 2192|回复: 4

mov [bx+2],cs 为什么可以实现内存单元与段寄存器的寻址?

[复制链接]
发表于 2013-11-8 11:20:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

(2)补全程序,使jmp指令执行后,CS:IP指向程序的第一条指令。

完整程序如下:
assume cs:code,ds:data

data segment
    dd 12345678h
data ends

code segment
start:  mov ax,data
    mov ds,ax
    mov bx,0
    mov [bx],bx      ;源操作数bx为所填内容
    mov [bx+2],cs    ;源操作数cs为所填内容
    jmp dword ptr ds:[0]

code ends
end start


对于 mov [bx+2],cs  为什么可以实现内存单元与段寄存器的寻址?

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-8 12:26:44 | 显示全部楼层
jmp dword ptr ds:[0]
就是让ip = ds:[0], cs = ds:[2];
使jmp指令执行后,CS:IP指向程序的第一条指令,就要让ds:[2]=代码段中的cs值, ds:[0] = 程序的第一条指令的偏移地址(就是0)。所以程序用语句
mov ds,ax
     mov bx,0
     mov [bx],bx
来修改ds:[0]的值为程序的第一条指令的偏移地址(就是0)。
用语句mov [bx+2],cs  来修改ds:[2]=代码段中的cs值(其实合格不用修改,反正cs的值都没变过)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-8 13:24:23 | 显示全部楼层

对于 mov [bx+2],cs  为什么可以实现内存单元与段寄存器的寻址?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-8 16:32:37 | 显示全部楼层
陈培伟 发表于 2013-11-8 13:24
对于 mov ,cs  为什么可以实现内存单元与段寄存器的寻址?

mov [bx+2],cs  是把段寄存器(就是一种寄存器)的值送到一个内存单元去。至于为什么允许把寄存器送到内存去,这就是8086cpu硬件设计上的事情了,我们可以把它十位一种规定。
就比如你不能用类似mov ds, 123这样把立即数送到段寄存器。这些东西除非你深究8086cpu的内部结构,否则都无法明白本质原因。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-9 17:03:40 | 显示全部楼层
不是有call 存储器操作数 这样的语句吗,分开就是push cs:ip,然后jmp 存储器操作数,这个存储器操作数放到了cs:ip中了,也就是说存储器操作数可以直接放到cs中,并没有通过通用寄存器来吧存储器操作数放到cs中的,所以我觉得cs也是个指针寄存器,能直接和存储器操作数交换数据的,,只是我自己的猜测,要弄懂的话真得研究cpu硬件结构,看看cs的地址总线有没有和存储器直接联系着
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 12:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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