. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(CPU工作原理)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  关于IP内容设置的问题(如何判断指令长度的问题)的解答  [已解决] 回复[ 4次 ]   点击[ 475次 ]  
lonelyhover
[帖 主]   [ 发表时间:2013-04-09 00:49 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-07-18 20:29
看到很多同学都在提问,关于IP是如何确定一个指令的长度是两字节还三字节,又或者只是一字节指令?
事实上这已经是《计算机组成原理》的内容了,笔者在这里尝试做出简单的回答,希望可以帮助那些没有学习过相关课程的同学有一个直观和整体的了解。
首先,大家要明白,汇编语言是计算机机器语言的助记符,也就是说汇编的代码实际上就是机器语言,就是由“0”和“1”组成的机器指令。
简单的介绍下机器指令的工作方式,已经是直接以高低电平来控制cpu内各个电气元件的物理性质的方式来直接操作CPU的工作了。比如控制某个门电路的状态,来使某一位寄存器单元与某根总线连通,从而使该单元内容得到读写;又或者控制这个门电路关闭,来保持这个寄存器单元的内容保持不变,等等。
在对机器指令的工作方式有了初步的了解后,我们来简单的了解下机器指令的构成。一条机器指令通常包括:所要进行的操作;所涉及的数据及其地址和寻址方式;所涉及的寄存器;以及其他相关标识(这样说其实并不完全准确,但是便于理解)。而我们的问题,就是由那些“相关标识”来解决的。而这没一部分,其实都是通过直接影响总线电平的方式来影响CPU内的元件状态的方式达到操作目的的。
那么现在我们回归我们的问题,“IP是如何知道一条指令的长短呢?”,其实知道了上面所说的这些,大家应该很容易就想到了,那就是通过在编制指令的过程中,对不同指令字长的指令分别编制特定的,可以指出指令字长的特征编码。事实上IP并不知道该读几个字节,而是由CPU中控制指令读取的CU(控制单元)通过这些特征编码,控制读取指令的长度。IP只是每读取一个字(IP甚至不考虑所读取的是数据还是指令)就加一,至于读多少个,则是CU来控制的。
所以,每条指令都因为特征编码的原因可以被CU准确的知道其字长,这样也就可以准确的读取,而其表现出来的就是,每条指令读取后IP都奇迹般的准确指向了下一条指令的地址。
29960758
[第1楼]   [ 回复时间:2013-06-15 16:10 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2013-06-15 10:10
专业,赞一个。
那么cpu是从哪儿获取特征码的呢~~?
难道是指令集?
那指令集又是什么呢?
百度吧。google吧。
lonelyhover
[第2楼]   [ 回复时间:2013-07-05 09:02 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-07-18 20:29
专业,赞一个。
那么cpu是从哪儿获取特征码的呢~~?
难道是指令集?
那指令集又是什么呢?
百度吧。google吧。
------------------
回复:就是指令集,在指令编制的时候人为设置好的,但这个设置不是完全随意的,这个设置实际上是根据硬件设计设置的,所以归根结底是硬件设计的时候设置的。
pkingsha
[第3楼]   [ 回复时间:2013-07-05 19:42 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:0
注册日期:2013-02-02 01:48
谢谢楼主,最近我也在想这个问题来着~看完后我是这样理解的,如2000:0~2000:3内存单元存放的E8 23 01十六位数据,相当于指令mov ax,0123.IP指向2000:0指向的是E8,是不是说E8的机器码里面有一个位是指向下一个内存单元的呢?
lonelyhover
[第4楼]   [ 回复时间:2023-04-03 20:36 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-07-18 20:29
此贴由 贴主 于 [ 2023-04-03 20:36 ] 结贴。 结贴原因:问题已解决
得分情况:
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved