首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

! 疑惑!计算机底层运作

2012-02-12 
求助! 疑惑!计算机底层运作在计算机中数据不是以2进制的形式进行储存的么??可是为什么一个软件进行动态调

求助! 疑惑!计算机底层运作
在计算机中数据不是以2进制的形式进行储存的么??
可是为什么一个软件进行动态调试的时候却是汇编码(静态调试也如此)
(难道cpu能看懂汇编码么??如果不能,,那为什么内存中都是汇编码??如果能,,那么从物理的角度讲cpu是如何实现可以看懂汇编码的??)
在计算机内部,各个部件之间的数据,指令传递是什么形式存在的??(二进制还是汇编码??不同的数据传递是通过改变电流大小实现的么??如果不是,那是什么??)

(ps:如果有知道答案的好心人,,望能给予解答)

[解决办法]
基本上楼上的说的比较正确

汇编指令是一种语言,其地位和c/c++类似,只是一种能被特定编译器识别的语言

编译器将这些指令翻译成计算机能够执行的机器2进制代码

但是在程序员进行调试的时候,需要看一些mcu或者pc的registers来判断程序执行的异常

这个时候对于程序员来讲,要看懂这些2进制代码是多么的可怕,为了方便也是最接近真实反映

计算机如何执行的汇编就出现了,随即就有了楼主看到所谓内存中的汇编,这个并不是在内存中存在的

内存中存在的是这些指令的机器码,比如movl $10, (%ebp)这个指令对应的机器码可能就是XXXX
(具体字节和数值可以去查询)
计算机就在一直处理这些个指令,从取指令,分析指令,执行指令,……这样一直重复着

[解决办法]
推荐你看看计算机组成原理的指令部分,你应该不是计算机专业出身的吧,不然这种问题本科专业课都有讲的很详细。
汇编码实际上是和机器语言基本上一一对应。仅仅是在机器语言的基础上能够给你提供一些宏汇编或者是自动变量编址这些特性。但是机器语言实际上可以一一翻译成对应的汇编码,纯汇编码可以认为只是机器码的“助记符”,只是方便人阅读和记忆。
物理角度看,指令就是以二进制数据方式存在。以PowerPC为例,32bit定长指令中中有某些位为操作位,某些位为操作数。假设CPU取到这么一个指令:
0x3864FFFF
PPC规定指令高6bit为OPCode(可以理解为是机器码形式的汇编操作符,比如addi这个汇编命令对应的OPCode是0xE)。所以指令译码单元会取出前面那个指令的高6bit,值为0xE,发现是addi指令。然后按照addi指令固定的格式取出操作数,addi指令格式如下:
6bit OPCode | 5bit 目的寄存器编号 | 5bit源寄存器编号 | 16bit立即数
所以解析出来,上面的指令就是:
0xE | 0x3 | 0x4 | 0xFFFF
当然这是CPU看到的指令形式,你要是一一翻译成汇编码就是:addi r3, r4, 0xFFFF(r4寄存器加0xFFFF并保存结果到r3寄存器中)。
这里起码你能明白机器码和汇编码的对应关系了~~很简单的基本上是一一对应。
指令被解析出操作码和操作数以后就算是完成译码了。ALU就可以得到足够的信息完成指令的执行,后面就不多说。

热点排行