鱼C论坛

 找回密码
 立即注册
查看: 1918|回复: 9

我在2.1 cs:ip 那章遇到一些问题

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

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

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

x
如下:
CS:IP  2000:0000  送入地址加法器   变成 物理地址 然后从内存里读取命令  读取的不是物理地址为20000的命令吗  为什么会读 20000 - 20002的命令?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-28 20:36:43 | 显示全部楼层
2000:0000 B8
2000:0001 23
2000:0002 01
对应的汇编指令是: mov ax,0123H
这条指令长度为3 Byte
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-28 22:11:24 | 显示全部楼层
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通过它能知道一条指令从哪开始,到哪结束。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-28 23:25:44 | 显示全部楼层
你给个你不理解的例题啊,不然不好回答哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-8-28 23:48:50 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-29 00:01:59 | 显示全部楼层
为什么会读 20000 - 20002的命令?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-29 17:26:42 | 显示全部楼层
网络学习 发表于 2012-8-29 00:01
为什么会读 20000 - 20002的命令?

机器指令的第一个字节就包含了一些信息,我想CUP通过它能知道一条指令从哪开始,到哪结束。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-29 23:12:30 | 显示全部楼层
我的猜想,mov ax,10
这个指令占3个字节翻译成机械码就是b8 10 00
代码存放的内存地址是20000
而一个内存空间只能存放一个字节也就是b8 那么为了读取这条指令肯定不能少了后面2个字节的机械码
但又没有空间所以cpu就自动将后面的代码玩后放。也就是说你读取的这条指令只是起始地址为20000。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-30 00:01:01 | 显示全部楼层
飘着的云彩 发表于 2012-8-29 17:26
机器指令的第一个字节就包含了一些信息,我想CUP通过它能知道一条指令从哪开始,到哪结束。

谢谢你的回答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-30 10:52:35 | 显示全部楼层
有地址有长度,才能正常
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-9-27 23:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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