Lai*_*ura 13 hardware assembly grammar
我很好奇汇编语言是如何工作的 - 我仍然很普遍,因为我不是只谈论intel x86汇编(尽管它是我唯一熟悉的汇编语言).要更清楚一点......
mov %eax,%ebx
Run Code Online (Sandbox Code Playgroud)
计算机如何知道"mov"这样的指令是什么?怎么知道eax和ebx是寄存器?人们会为汇编语言编写语法吗?他们怎么写这个?我想没有什么是从编写替代了汇编语言停止某人mov的东西,如指令dog或horse等,(显然这不是语义在所有)
对不起,如果这不是太清楚,但这是我觉得有点令人费解的事情 - 我知道它不是魔术,但我看不出它是如何工作的.我在维基百科上查了一些东西,但它似乎只是将它翻译成机器代码,好吧,我问的是我认为翻译是怎么发生的.
思考?
编辑:我意识到这些东西是在参考手册和事情中定义的,我想我想知道的是你如何告诉你的处理器"好的,当你看到mov你要这样做"时.我也知道它可能是一大堆逻辑门.但是处理器必须有一些方法来识别那mov就是"使用这些逻辑门"的符号
Mik*_*ola 21
计算机基本上是由逻辑门构建的.虽然这是真实物理机械的抽象理想化,但它足够接近我们现在可以相信的事实.在非常基础的层面上,这些东西就像真/假谓词一样.或者,如果你曾经玩过我的世界,它的工作方式很像红石.研究如何将逻辑门组合在一起以制作有趣的复杂电路(如计算机)的领域称为计算机体系结构.它传统上被视为计算机科学和电气工程的混合体.
最基本的逻辑门是像AND和OR这样的东西,它只是将位拼凑在一起并粉碎它们之间的一些布尔运算.通过在逻辑门中创建反馈回路,您可以存储内存.一种类型的标准存储器电路称为触发器,它基本上是一个小的线圈,连同一些AND门和电源以保持稳定.将多个锁存器放在一起可以创建位向量,这些东西称为寄存器(eax和ebx之类的东西代表).还有许多其他类型的部件,如加法器,多路复用器等,它们实现了各种布尔逻辑.这是一些电路的目录:
http://www.labri.fr/perso/strandh/Teaching/AMP/Common/Strandh-Tutorial/Dir.html
你的CPU基本上是把这些东西粘在一起,都是用相同的基本逻辑门构建的.计算机知道如何继续执行指令的方式是,有一种称为时钟的特殊机器,可以定期发出脉冲.当CPU的时钟发出脉冲时,它会在这些逻辑门中引发一系列反应,导致CPU执行指令.例如,当它读取一条说"mov eax,ebx"的指令时,最终发生的是其中一个寄存器(ebx)的状态在下一个寄存器之前及时被复制到另一个寄存器(eax)的状态.脉冲来自时钟.
当然,这是一个粗略的过度简化,但作为一个高级别的图片,它基本上是正确的.剩下的细节需要一段时间才能解释,而且由于不必要的细微之处,我忽略了一些事情(例如,在真正的CPU中,有时多个指令在单个时钟中执行;并且由于寄存器分页有时eax不是总是一样的东西;有时由于偶尔重新排序,指令执行的方式会被移动,等等.然而,它绝对值得学习整个故事,因为它实际上是非常惊人的(或者至少我喜欢这么认为!)你会很乐意出去阅读这些东西,并且可能尝试建立一个您自己的几个电路(使用真实硬件,模拟器,甚至是我的世界!)
无论如何,希望能回答一些关于mov eax,ebx的问题.
您的CPU不执行程序集.汇编程序将其转换为机器代码.此过程取决于特定的汇编语言和目标计算机体系结构.通常那些是齐头并进的,但你可能会发现不同的汇编语言(例如,nasm与AT&T),它们都转化为类似的机器代码.
典型的(MIPS)汇编指令,例如"And immediate"
andi $t, $s, imm
Run Code Online (Sandbox Code Playgroud)
将成为32位机器码字
0011 00ss ssst tttt iiii iiii iiii iiii
Run Code Online (Sandbox Code Playgroud)
其中s和t是0-31的数字,它们是名称寄存器,并且i是16位值.这是CPU实际执行的这种位模式.的001100在开始时是对应于操作码andi指令,并且随后的比特模式- 5位源寄存器,5位目标寄存器,16位的文字-取决于该指令.当该指令被放入CPU时,它通过解码操作码,选择要读取和写入的寄存器以及配置ALU以执行必要的算术来适当地响应.
| 归档时间: |
|
| 查看次数: |
15058 次 |
| 最近记录: |