mov [bx+2],cs 为什么可以实现内存单元与段寄存器的寻址?
(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为所填内容
mov ,cs ;源操作数cs为所填内容
jmp dword ptr ds:
code ends
end start
对于 mov ,cs为什么可以实现内存单元与段寄存器的寻址?
jmp dword ptr ds:
就是让ip = ds:, cs = ds:;
使jmp指令执行后,CS:IP指向程序的第一条指令,就要让ds:=代码段中的cs值, ds: = 程序的第一条指令的偏移地址(就是0)。所以程序用语句
mov ds,ax
mov bx,0
mov ,bx
来修改ds:的值为程序的第一条指令的偏移地址(就是0)。
用语句mov ,cs来修改ds:=代码段中的cs值(其实合格不用修改,反正cs的值都没变过) 仰望天上的光 发表于 2013-11-8 12:26 static/image/common/back.gif
jmp dword ptr ds:
就是让ip = ds:, cs = ds:;
使jmp指令执行后,CS:IP指向程序的第一条指令,就 ...
对于 mov ,cs为什么可以实现内存单元与段寄存器的寻址? 陈培伟 发表于 2013-11-8 13:24 static/image/common/back.gif
对于 mov ,cs为什么可以实现内存单元与段寄存器的寻址?
mov ,cs是把段寄存器(就是一种寄存器)的值送到一个内存单元去。至于为什么允许把寄存器送到内存去,这就是8086cpu硬件设计上的事情了,我们可以把它十位一种规定。
就比如你不能用类似mov ds, 123这样把立即数送到段寄存器。这些东西除非你深究8086cpu的内部结构,否则都无法明白本质原因。 不是有call 存储器操作数 这样的语句吗,分开就是push cs:ip,然后jmp 存储器操作数,这个存储器操作数放到了cs:ip中了,也就是说存储器操作数可以直接放到cs中,并没有通过通用寄存器来吧存储器操作数放到cs中的,所以我觉得cs也是个指针寄存器,能直接和存储器操作数交换数据的,,只是我自己的猜测,要弄懂的话真得研究cpu硬件结构,看看cs的地址总线有没有和存储器直接联系着
页:
[1]