鱼C论坛

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

请问为什么20000H单元存放的指令是B8 23 01?

[复制链接]
发表于 2011-2-10 11:55:00 | 显示全部楼层 |阅读模式

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

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

x
1.jpg


请问为什么20000H单元存放的指令是B8 23 01?
为什么是三个单元,为什么不是B8?
20000H所对应的只有一个B8单元啊!
谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-2-10 12:31:13 | 显示全部楼层
mov ax,0123h拆开来看,mov不占字节,ax占一个字节(即B8),0123h占两个字节,一个0123h是由高8位和低8位组成,即01和23,又因为8位等于1个字节,所以0123h占两个字节。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-2-10 12:48:07 | 显示全部楼层
有一点不同意见哦,是不是应该是MOV作为指令或者助记符占有一个自己,AX是寄存器只是容器不占字节,0123H占两个字节,是这样呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-2-10 20:08:10 | 显示全部楼层
这个涉及到机器码的编码问题  机器码只能以二进制的形态让cpu去识别  而在二进制形态下他有自己的opcode。
     对于mov reg imm类型的(reg就是寄存器,imm是立即数)机器码的格式为1011 wrrr 后面接立即数的二进制形态 (这里是23 01),w位确定后面的立即数是16位的还是8位的, w=1则是16位的 这里就是16位的,所以后面跟了两个4个字节的数据。rrr代表寄存器的编号  000 代表ax/al/eax看具体的情况,这里是ax。所以二进制的机器码为1011 1000 换成十六进制就是B8 后面接16位的立即数。因此,cpu如果读取一个单元的数据 而这个数据是b8的话,他就已经知道整条指令所占的字节数(因为w=1 后面是16位的数据占两个字节)啰啰嗦嗦讲了一大堆也不知道是不是讲清楚了。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-2-10 23:53:47 | 显示全部楼层
因为cs:ip指向此处,要把20000h单元中的数据当成指令来读取,连续的3个字节才为一个完整的指令,所以要连续读取3个字节,如果是数据ds:si指向此处时,那就要当成数据来读取,这样就可以,一个字节一个字节的读取了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2014-10-22 20:58:58 | 显示全部楼层
机器码只能以二进制的形态让cpu去识别  而在二进制形态下他有自己的opcode
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-7 02:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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