社区
汇编语言
帖子详情
困感己久---cpu是怎样识别一条接一条的指令的?
xiaowenwen
2004-11-11 07:32:57
指令在存储器中是以0和1存放的,并且各指令不等长,那么我想知道的是cpu怎么知道多长的一个0、1组成的串组成一条指令啊?每条指令的首尾相接,怎么识别各条指条的始末啊?
...全文
1320
44
打赏
收藏
困感己久---cpu是怎样识别一条接一条的指令的?
指令在存储器中是以0和1存放的,并且各指令不等长,那么我想知道的是cpu怎么知道多长的一个0、1组成的串组成一条指令啊?每条指令的首尾相接,怎么识别各条指条的始末啊?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
44 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
acev
2004-11-26
打赏
举报
回复
Frank_Xu()
您是以前常在VB的Frank_Xu?现在研究汇编了啦?:)
CloneCenter
2004-11-25
打赏
举报
回复
就象人看书一样,每个词的长度不一样,但是你可以分辨得出来。因为你会断句,同样的,CPU会解释指令。
Frank_Xu
2004-11-25
打赏
举报
回复
顶一下
xiaowenwen
2004-11-22
打赏
举报
回复
就照楼上说的,可是cpu怎么知道操作码到哪结束呢?
Gujianda
2004-11-22
打赏
举报
回复
哈哈,我是想来混几个分的,[hswxf(雪山爆发)]才是正解!虚心学习....
ovmem
2004-11-22
打赏
举报
回复
学习ing
hswxf
2004-11-22
打赏
举报
回复
设计CPU中的一条是选好指令集,而指令集的选择主要源于三个方面:
1.指令格式,如是RISC的就是定长了,后期的(586)的INTEL采用了CISC转换成RISC的电路(内核,我不喜欢这个词).
2.指令格式:包括帧格式定义,长度等
3.寻址数等
至于楼上说的识别模式,那应该是电路的事,逻辑层史对帧结构运算,也主要由电路(硬件)完成.而对编码操作,则是在指令层完成,主要是由指令池产生的"硬件过滤"(不是很准确哟)产生识别,而识别的方法是由设计者确定的,在逻辑层完成.不一定是帧首方式,识别类型较多,一个CPU内的电路层识别结构就可能有十几种,逻辑层识别模式也最少有多个.
嘿嘿!不知道有没有错字!
啪!
还是先吃个什么
Gujianda
2004-11-22
打赏
举报
回复
首先不明确你指的"操作码"是一条指令中的操作码部分还是指整个一条指令、还是泛指程序序列。
1,如果是指是一条指令,那么设计和编排操作码时就要考虑这点,即 CPU 读入指令的第一字节后就要能明确:
指令还有没有第二个字节,如果有则中间三个Bit是REG?还是操作码的补充位?
操作码(1或2个字节)全部读入后就要让 CPU 明确后面有几个操作数、每个操作数是几个字节?
如此就能保证完整读入一条指令的操作码部分和操作数部分。还是那句话:“相信”Intel...
2,如果是泛指程序序列,那么我觉得正如你所言,CPU 根本不知道哪里是代码的结束,事实上内存里的程序首先是操作系统的程序,它可是是无穷循环往的,对某个程序来说即使退出了,也只不过是退到了操作系统(OS)而已,CPU 可没有停下!
3,也许您刚接触汇编,那么这里再罗所一句:源程序里的"END"仅仅是告诉编译器:"我的代码写完了"而已。一个程序的代码,如果在完成任务后,没有执行"退到操作系统"的指令,那么 CPU 就会继续读入这段代码后面的东西,并继续把它门"理解"成指令代码来执行,这显然就会出"笑话"!
ovmem
2004-11-22
打赏
举报
回复
…………用 hlt 结束,对应十六进制0F4
看来你对原理是一点都不了解,建议你还是自己先看书,不明再问,你在想这里想找捷径是不行的,这种学习方法效率很低
Gujianda
2004-11-21
打赏
举报
回复
正如楼上所比喻的,只要是一段正确的代码,放入内存后,从"第一个"字节(由操作系统定位)读起肯定是指令,只要读到了指令,后面的内容是另一条指令还是本指令的操作数就不言而喻了。
至于CPU如何读懂指令的,当然CPU的设计者是动过一番脑筋的,按理说我们信任他们就行了。
8088指令的长度可以是1~7个字节,其中的操作码1~3字节,其余的操作数部分有多长就看是什么寻址方式了。
8088的大多数指令的操作码是两个字节,如果指令指明了段跨越,则在这两个字节前就会插入一个字节,用来指出段。格式如下:"001SEG110",SEG=00:ES;SEG=01:CS;SEG=10:SS;SEG=11:DS。
怎么样?看出这个字节的特征了码?(Intel公司保证不会有哪条指令的的操作码和它一样!)
下面说说一般指令的格式:
1,一个操作数:指令第一个字节的Bit0~Bit6是操作码,Bit7用来标明是8位还是16位操作数。第二个字节格式如下:MOD xxx R/M。MOD指明第一个操作数在存储器(MOD=00~10)或在寄存器(MOD=11),中间的三位仍然留给操作码,R/M(共三位)给出存储器寻址的基址或给出寄存器的位置(如AL、AX等)。后面跟着的两个字节当然就是操作数了(一般以偏移地址的形式给出)。
2,两个操作数:指令第一个字节的Bit0~Bit5是操作码,Bit6标记:第一个操作数是目的操作数(=0)或第二个操作数是目的操作数(=1),Bit7标记:是8位数(=0)16位数(=1)。第二个字节格式如下:MOD REG R/M。REG=000~111指出是哪个寄存器(如AL、AX等)。
按理说两个字节可以安排65536条不同的指令,但实际上没这么多,大概就是为了避免指令雷同冲撞,呵呵,您不妨充分相信 Intel 的工程师吧。
ovmem
2004-11-21
打赏
举报
回复
to 楼主:
看我的这段话你懂我说什么吗如果不懂你可能就是有智力问题了cpu读指令也和你现在差不多你也不妨把我的话连成一个环然后再在其中某个字开始读直到读完所有的字看一下你还能读懂什么其实cpu也经常会出现这样的错误
avalonBBS
2004-11-20
打赏
举报
回复
做个记号先 : )
Areslee
2004-11-18
打赏
举报
回复
偶目前正在看这方面的问题^_^
看能不能做个有意思点的DEBUG出来玩玩
目前在写脚本处理器中,麻烦:(
Ruluo
2004-11-18
打赏
举报
回复
不同的指令有不同的编码方式
指令编码的方式确定了指令的长度
机器取指令时根据指令名称取不同的长度(字节)不就OK了
指令首尾相接不假
但指令长度都是字节的整数倍
是以字节为单位首尾相接,不是以“1”、“0”相接
也就是不会出现两个指令共占一个字节的一部分这种情况
所以不难识别
程序执行期间
取指周期取出的是指令、其他是数据
也就是以访存时间的不同(取指周期和非取指周期)来区分指令和数据的
不知说的对不?
还是要好好看看《组成原理》
……
Areslee
2004-11-18
打赏
举报
回复
没啥,构想中
W32API
2004-11-18
打赏
举报
回复
看来这家伙是闲得发慌了。。。
meng007
2004-11-18
打赏
举报
回复
to meng007()
没讲怎么明白?你讲讲看。
我的意思是说,如果要把这个问题给你彻底解释清楚,就快写一本微机原理书了,所以你不如找本微机原理好好看看,国内的书就算了,看看编码的奥秘之类的,还有我曾经推荐过的
http://community.csdn.net/Expert/topic/3466/3466150.xml?temp=.9184992
W32API
2004-11-18
打赏
举报
回复
二楼的,有意思的 DEBUG ? 说说
red-fly
2004-11-18
打赏
举报
回复
记住这一贴了先
hswxf
2004-11-17
打赏
举报
回复
制学要严谨:)
好象俺们老头呀!嘿嘿!
不过太认真了就不好玩了,当然,你还是对的!呵呵!
加载更多回复(24)
理解
CPU
怎么执行
一条
指令
取
指令
(Fetch)解码(Decode)执行(Execute)写回(Write Back)(如果适用)这一整个
指令
周期通常是以时钟周期为单位进行的,
CPU
每个时钟周期可以完成一到多条
指令
的执行。随着技术的发展,现代
CPU
采用了流水线技术,使得多个
指令
可以同时进行不同的阶段,从而提高了执行效率。通过对
指令
周期的理解,我们可以更好地掌握
CPU
如何高效地执行程序。[
CPU
]爆肝一天,用动画带你理解
CPU
怎么执行
一条
指令
呢?_哔哩哔哩_bilibili。
一条
指令
在
cpu
中的执行流程(理解
CPU
组成)
几乎所有的冯·诺伊曼型计算机的
CPU
,其工作都可以分为5个阶段:取
指令
、
指令
译码、执行
指令
、访存取数、结果写回。
用二进制码表示的
指令
和数据都放在内存里,那么
CPU
是怎样
识别
出它们是数据还是
指令
呢?
CPU
通过不同的阶段和不同的机制来区分
指令
和数据。
一条
指令
在
cpu
中的执行流程
CPU
: 1.寄存器; 2.控制器CU(Control Unit):          
指令
寄存器IR(InstructionRegister)、
一条
指令
的执行,居然只需要这5个步骤!
我是
一条
指令
,我现在慌得一批 我是
一条
指令
,在被
CPU
处理5次后,即将被销毁释放,我现在慌得一批。 毕竟,主存的空间是有限的,被执行完的我也失去了存在的价值。 我十分羡慕那些能够被持
久
化到内存中的
指令
,因为等待他们的是永生。 听前辈们说,人类在一生即将结束的时候,脑海中就会跑马灯般浮现自己这一生的场景,从出生的第一刻起,到幼年、青年、壮年、老年,直至此时。 虽然我不是人类,但是前辈也说了,
指令
们在...
汇编语言
21,500
社区成员
41,618
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章