Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Search 如何找到有关极低级别编程的信息?_Search_Assembly_Search Engine_Cpu Architecture_Low Level - Fatal编程技术网

Search 如何找到有关极低级别编程的信息?

Search 如何找到有关极低级别编程的信息?,search,assembly,search-engine,cpu-architecture,low-level,Search,Assembly,Search Engine,Cpu Architecture,Low Level,首先,介绍一下这个问题的背景:今天,我想了解一下测试在汇编中是如何工作的。不幸的是,我似乎无法在谷歌中找到答案,因为测试、组装等都是在其他情况下经常使用的常用词。最后,我通过搜索条件分支找到了一些信息,这不是我要寻找的,但这是一个足够好的起点 我想问你的问题是,我应该去哪里获取有关低级计算机操作的信息?e、 g.如果我想知道分支语句是如何工作的,或者cpu缓存是如何工作的,或者在移位寄存器时额外的位会发生什么变化?如何搜索这些指令?汇编指令是特定于体系结构的,因此您可以在该体系结构的文档中找到它

首先,介绍一下这个问题的背景:今天,我想了解一下测试在汇编中是如何工作的。不幸的是,我似乎无法在谷歌中找到答案,因为测试、组装等都是在其他情况下经常使用的常用词。最后,我通过搜索条件分支找到了一些信息,这不是我要寻找的,但这是一个足够好的起点


我想问你的问题是,我应该去哪里获取有关低级计算机操作的信息?e、 g.如果我想知道分支语句是如何工作的,或者cpu缓存是如何工作的,或者在移位寄存器时额外的位会发生什么变化?如何搜索这些指令?

汇编指令是特定于体系结构的,因此您可以在该体系结构的文档中找到它们的确切行为。如果您只是在学习,我建议您从一个简单的RISC架构开始,就像Atmel 8位avr芯片使用的架构一样

低于汇编指令的是操作码操作码,它是汇编指令在现代汇编程序中汇编成的少数几件事情。这些都非常特定于体系结构,并且与cpu处理参数的方式有关,如果指令中有任何指令,例如,参数可能是相对于当前地址的偏移量,也可能是内存中任何位置的完整地址,也可能是文字值或其他完全不同的内容。 因为在某一点上,我们需要将指令简化为特定的版本,在该版本中,我们的参数被视为我们想要的,接受参数的指令将存在于不同的版本中,这取决于它们可以接受的参数类型和寻址模式。 存在于多个版本中的指令支持多种寻址模式的一个例子是6502中的LDA。因此,基本上,比汇编更低的级别将是简单地将操作码写入内存,这是完全可行的,并且可能会让您非常熟悉您选择的芯片

在哪种体系结构中,哪种指令支持哪种寻址模式是完全不同的

如果你想要比这更低的级别,即实际的机器代码是如何在芯片的门上执行的,你需要研究一个有良好文档记录和逆向工程的芯片,类似的东西可能会有所帮助

关于6502主题,正如Olivier Dulac提到的,skilldricks easy6502项目在学习和理解6502汇编编程、寻址模式和操作码方面也非常有帮助


请注意,对于初学者甚至RISC程序员来说,开始使用x86(一种CISC体系结构)可能会让人望而生畏。

这就是我所理解的非常低级的编程:

有了《诅咒》和《英特尔手册》中的材料,我能够做一些有趣的事情,比如唤醒多核处理器中的所有内核,并从MS-DOS中为每个内核分配要执行的代码

比这更低的是使用VHDL或Verilog设计自己的微处理器。然后你不再是在编程,而是在描述电子产品,尽管你这样做看起来像是在编程。事实上,您最终会得到一个稍微不同的范例,在这个范例中,语句本质上是并行执行的,而不是顺序执行的。这样,两个变量的值交换如下:

a <= b;
b <= a;

有关描述处理器和电子产品的示例,请访问

查找有关微程序设计的信息,如果这还不够,请访问nano编程。几十年前有一台纳米编程计算机,是一台经典的计算机,但我记不起它的名字了

对于微程序设计,您可能喜欢使用。
这是一个微可编程处理器体系结构模拟器,也有一些可下载的示例体系结构。

网络上有成千上万的此类资源。为什么你不能自己研究它呢?请阅读架构文档,例如for x86。@MartinJames,因为如果我在这里发布这个问题,我会从比我了解更多的其他人那里获益,他们为我指明了正确的方向;这样,下一个想知道同样事情的人就可以很容易地在这里找到答案——这不是堆栈溢出的原因吗?@KerrekSB-Ooh,这是一个很好的答案!非常感谢。我从来没有意识到有一本出版的手册,尽管事后看来很明显。arm手册有相当好的伪代码来描述移位位和新位的每个指令。这是一个不错的学习平台。缓存是另一个话题,它有其他的地方可以看,我会从汇编代码/机器代码开始,然后一旦你对内存总线有了感觉,然后进入MMU和缓存。一个非常好的答案是+1:清晰,信息丰富,有很好的指针,这个网站对我来说是新的,我在6502年开始编程
在我的C64上。美好的回忆@贝努伯德:哦,我在上面的visual6502上找到了一块宝石:6502上非常清晰的启动说明。我认为这可能是一个非常好的起点,因为机器是Nanodata QM 1。
t = a;
a = b;
b = t;