首先,关于这个问题的一些背景:今天,我正在寻找关于测试如何在装配中起作用的解释。不幸的是,我似乎无法在谷歌中找到答案,因为“测试”,“汇编”等都是在其他情况下经常使用的常用词。最终我通过搜索“条件分支”找到了一些信息,这不是我想要的,但是它是一个很好的起点。
我的问题是,我在哪里可以获得有关低级计算机操作的信息?例如如果我想了解一个分支语句是如何工作的,或者cpu缓存是如何工作的,或者当你移位寄存器时多余的位会发生什么?我如何搜索这些?
答案 0 :(得分:6)
汇编指令是特定于体系结构的,因此您可以在该体系结构的文档中找到它们的确切行为。如果您只是在学习,我建议您从简单的RISC架构开始,就像Atmel 8位avr芯片使用的架构一样。
“低于”汇编指令是“操作码”(操作码),这些汇编指令被“组装”成(现代装配商完成的其他一些事情)。这些对于体系结构非常具体,并且与cpu处理指令的参数(如果有)的方式有关,例如,参数可能是与当前地址(相对)的偏移量或者它可以是内存中任何地方的完整地址,也可以是文字值或完全不同的其他内容。 因为在某些时候,我们需要将指令归结为我们想要处理我们的参数的特定版本,带参数的指令将存在于不同的“版本”中,具体取决于它们可以采用的参数类型(“寻址“)。 存在于若干版本中的指令的一个示例(支持几种寻址模式)是心爱的6502中的LDA(http://www.6502.org/tutorials/6502opcodes.html#LDA)。所以基本上,比汇编更低的级别是简单地将操作码写入内存,这是完全可行的,并且可能会让你与你选择的芯片非常亲密。
架构的哪些指令支持哪种寻址模式的差别很大。
如果你想要“低于”水平(即,如何在芯片的门上执行实际的机器代码),你需要研究一个记录良好且逆向工程的芯片,如{{3可能有帮助。
关于6502的主题,正如Olivier Dulac所提到的,skillddicks easy6502项目在学习和理解(6502)汇编编程,寻址模式和操作码方面也非常有帮助。 http://visual6502.org/
请注意,开始使用x86(这是一个CISC架构)对于初学者甚至是RISC程序员来说都是非常艰巨的。
答案 1 :(得分:1)
这就是我所理解的“非常低级别的编程”: http://www.cs.usfca.edu/~cruse/cs630f06/
借助这个诅咒和英特尔手册中的材料,我已经能够做一些有趣的事情,例如唤醒多核处理器中的所有内核并分配代码来执行每个内核,从MS- DOS。
甚至比使用VHDL或Verilog设计自己的微处理器还要低。然后你不再“编程”,而是描述电子学,虽然你做的方式似乎是编程。事实上,你最终会得到一个稍微不同的范式,其中语句本质上是并行执行而不是顺序执行。这样,交换两个变量的值就是这样做的:
a <= b;
b <= a;
而不是这(我们所知道的方式):
t = a;
a = b;
b = t;
有关描述处理器和电子设备的示例,请转到http://www.opencores.org
答案 2 :(得分:0)
找到微程序设计,或者如果这还不够,那就是纳米编程。几十年前有一台纳米编程计算机(经典),但我不记得这个名字了。
对于微程序设计,您可能希望使用this。 它是一个可编程的处理器架构模拟器,也有一些示例架构可供下载。