鱼C论坛

 找回密码
 立即注册
查看: 5001|回复: 11

CPU是如何判断一段二进制数据为一组命令的?

[复制链接]
发表于 2011-4-30 08:15:58 | 显示全部楼层 |阅读模式

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

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

x
在学习“2.10 CS 和 IP”遇到的疑问:
           此节中关于“8086PC读取和执行指令演示”中,最后介绍了一个知识点:

无标题2.jpg

这个好理解,没有问题。




但是,疑问是:之前CPU是如何判断内存单元中的数据为一组汇编指令的呢?
为什么CPU从地址20000H读取到地址20002H就结束了,并认为这是一组汇编命令,而不把20000H到20004H这一段当做汇编指令呢?如下图:

无标题.jpg



表达能力不是太好!希望大家能明白我的意思。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-4-30 08:34:25 | 显示全部楼层
本帖最后由 sirliu 于 2011-4-30 08:36 编辑

唉,发完帖就明白了,突然灵光一闪
应该这样解释吧:
CPU在生产时内置了一些参数,其中就有把特定数据(B8,BB.....)当做汇编指令、其他数据当做数据(即高级语言的常量)来识别,比如上面的B8(二进制即机器码10111000),当CPU读到这一个数时,就认为他是MOV AX指令,而读到0123H(二进制即机器码100100011)时,由于生产CPU时没有定义该数据,就将其视为常量,即普通数据对待!

新问题又来了:如果出现想B8B8H这样的数据存在时,CPU将怎么样处理呢?


为验证我的想法,我百度到了下面的东西,拿出来分享下:

常用汇编命令与十六进制码对应表
B8         MOV AX
B9         MOV CX
BA         MOV DX
BB         MOV BX
CD         INT
FA         CLI ;关中断
BC         MOV SP
FB         STI ;开中断
FC         CLD ;设数据传输正方向
BF         MOV DI
F3         REPZ
A5         MOVSW
51         PUSH CX
50         PUSH AX
CB         RETF ;返回
9C         PUSHF ;标志寄存器入栈
74         JZ
9D         POPF ;出栈恢复标志寄存器
75         JNZ
BE         MOV SI
BF         MOV DI
80         CMP
E9         JMP
E8         CALL
C3         RET
B4         MOV AH
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-4-30 08:55:16 | 显示全部楼层
本帖最后由 loop 于 2011-4-30 08:55 编辑

回复 sirliu 的帖子

新问题又来了:如果出现想B8B8H这样的数据存在时,CPU将怎么样处理呢?
--------------------------------------------------------------------------------------------------------
据我的理解,B8B8H属于16进制,而mov ax 属于汇编指令,CPU是不知道怎么处理的,而是你给出的什么命令,告诉CPU要干什么,CPU根据你给出的命令,执行相应的动作。
例如:
    MOV AX,B8B8H     ;把B8B8的值赋值给AX
按你给出的对于指令,那么电脑就会认为是 B8 B8 B8。

我想你应该把汇编指令和16进制搞混淆了,汇编指令只是助记符,用于我们编程和读懂程序用的。在我们眼里是MOV AX,但在电脑眼里它会转成相应的16进制进行读写操作。


如有不对,欢迎讨论。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-4-30 09:10:41 | 显示全部楼层
本帖最后由 sirliu 于 2011-4-30 09:13 编辑

回复 loop 的帖子

据我的理解,B8B8H属于16进制,而mov ax 属于汇编指令。。。。。
我是从CPU的角度来思考的,MOV ax在我们编程时确实是助记符,但是最终都会被编译器编译成机器码存放在内存中,这个机器码对应的十六进制数就是B8H;而在程序执行时,CPU根据地址读取到内存单元中中的B8H时会将B8H翻译为MOV ax。如B80123H,就是MOV AX,0123H ;这里的B8就被CPU翻译为mov ax了。

我的新问题是:如果CPU读到B8B8H时怎么处理?
就是说B8B8H按照上面的规则处理的花,B8会被翻译为mov ax指令,那么B8B8H就是"MOV AX"+"MOV AX"。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-4-30 09:17:11 | 显示全部楼层
本帖最后由 loop 于 2011-4-30 09:17 编辑

回复 sirliu 的帖子

MOV AX 属于指令,电脑会读成B8,但B8B8属于你要操作的数据,电脑会当作数据来处理,而不会读成MOV AX。

不知道这样解释,你是否能听懂,不懂可以继续讨论。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-4-30 09:31:05 | 显示全部楼层
回复 loop 的帖子



就是说如果CPU遇到 B8B823H ,这样的指令也会把他当做数据处理吗?


可能我思维进入死圈了,我还是认为 B8B823H 会被CPU翻译为 mov ax,mov ax,23H.
你的意思是不是会把 B8B823H 被翻译为mov ax,B823H?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-4-30 09:31:58 | 显示全部楼层
本帖最后由 loop 于 2011-4-30 10:16 编辑

回复 sirliu 的帖子

看下面两张图,一张是机器码,一张是汇编指令。

                               
登录/注册后可看大图



                               
登录/注册后可看大图

不知道你能看懂不,如果不明白我在把图片里的内容注明下。

--------------------------------------------------------------------------------------------------------
B8B823H 被翻译为mov ax,B823H?

你还是把编译器和汇编搞混了,mov ax,b823 是给我们看的,便于理解。  B8B823是计算机翻译的结果。

------------------------------------------------------------------------------------------------------
图片我重新修正了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-4-30 09:48:20 | 显示全部楼层
谢谢斑竹不厌其烦的解答,
看完你贴的两张图,
我想应该这么理解吧:
CPU根据地址开始读取数据,从第一个可以匹配完整语法的内存单元开始执行指令。
比如地址指向的内存单元存放的数据为:0123B800H (上面帖子都写反了,写成 B80123H ,应该是 0123B8H ),由于 00H 没有对应的指令,而 B8 有对应的指令,为 mov ,所以从 B8H 开始匹配一个语句,B8H 后面的都当作数据处理,如 B8B8B8H 中只有最低位的 B8H 会被CPU翻译为 mov ax。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-4-30 10:06:51 | 显示全部楼层
本帖最后由 loop 于 2011-4-30 10:12 编辑

回复 sirliu 的帖子

你还是理解错误了,计算机是根据CS:IP所指向的地址当作指令来执行,并不是匹配什么语句。
MOV  AX 被计算机识别成指令翻译成机器码B8存在内存0位置,0123H是要处理的数据, 又分为高地址和低地址, 01属于高位放入高字节2,23属于低位放入字节1。
如下图:

                               
登录/注册后可看大图


你在把第2章的内容复习下,里面的实验1你搞懂了,对这些就好理解。

如果高低字节不理解,参考第3章内容3.1~3.3小节。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-4-30 10:15:26 | 显示全部楼层
是,现在就回炉重铸:)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-3 18:36:19 | 显示全部楼层
和我当初学这章一样,你必将是可造之材!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-4 22:38:55 | 显示全部楼层
好学生啊.....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-4-17 02:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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