我在2.1 cs:ip 那章遇到一些问题
如下:CS:IP2000:0000送入地址加法器 变成 物理地址 然后从内存里读取命令读取的不是物理地址为20000的命令吗为什么会读 20000 - 20002的命令? 2000:0000 B8
2000:0001 23
2000:0002 01
对应的汇编指令是: mov ax,0123H
这条指令长度为3 Byte mov ax,0123h 把这条指令翻译成机器指令,占三个字节。
这指令是把一个16位立即数送进16位的寄存器ax中,即:
mov Reg,Imm 类型,对应的机器码应该是1011wrrr,
其中w字段指定对字还是对字节操作,0是字节,1是字,这里w=1,rrr字段指定寄存器,查下表得rrr=000
rrr : W=0 : W=1 : reg32
000 : AL : AX : EAX
001 : CL : CX : ECX
010 : DL : DX : EDX
011 : BL : BX : EBX
100 : AH : SP : ESP
101 : CH : BP : EBP
110 : DH : SI : ESI
111 : BH : DI : EDI
操作码10111000,就是B8h,其余的两个字节,分别对应16位立即数0123h的低8位和高8位。
一条汇编指令就对应了这么一个三字节的机器指令:B8 23 01
从上述可知,机器指令的第一个字节就包含了一些信息,我想CUP通过它能知道一条指令从哪开始,到哪结束。
{:5_102:}你给个你不理解的例题啊,不然不好回答哦 GeV20 发表于 2012-8-28 22:11 static/image/common/back.gif
mov ax,0123h 把这条指令翻译成机器指令,占三个字节。
这指令是把一个16位立即数送进16位的寄存器ax中,即 ...
谢!!!!!! 为什么会读 20000 - 20002的命令? 网络学习 发表于 2012-8-29 00:01 static/image/common/back.gif
为什么会读 20000 - 20002的命令?
机器指令的第一个字节就包含了一些信息,我想CUP通过它能知道一条指令从哪开始,到哪结束。
我的猜想,mov ax,10
这个指令占3个字节翻译成机械码就是b8 10 00
代码存放的内存地址是20000
而一个内存空间只能存放一个字节也就是b8 那么为了读取这条指令肯定不能少了后面2个字节的机械码
但又没有空间所以cpu就自动将后面的代码玩后放。也就是说你读取的这条指令只是起始地址为20000。 飘着的云彩 发表于 2012-8-29 17:26 static/image/common/back.gif
机器指令的第一个字节就包含了一些信息,我想CUP通过它能知道一条指令从哪开始,到哪结束。
谢谢你的回答 有地址有长度,才能正常
页:
[1]