所有关于电路
技术文章

如何编写用于编程带覆盆子PI的32位ARM核心的装配说明

2019年2月26日经过斯蒂芬圣迈克尔

本文探讨了编程32位ARMbeplay体育下载不了核心所需的基本指示,同时构建对微架构的基本理解。

本文探讨了编程32位ARMbeplay体育下载不了核心所需的基本指示,同时构建对微架构的基本理解。

Assembly在当今的现代科技文化中名声不佳。由于大量的RAM和处理能力,c#和Python等高级语言为巨大的抽象级别铺平了道路。在某些情况下,这极大地提高了生产率,而在另一些情况下,却让整整一代程序员忘记了他们的代码实际上在做什么。

在本文中,我们将使用assembly中的基础,您可以以此为基础进行构建,同时使用最广泛的架构之一。也就是说,本文的目标读者是那些没有编写低级代码经验的人。我在Raspberry Pi上编写了这个程序集,使用Raspbian,因为它很受欢迎,也很容易使用。

支持信息:

为什么要学习汇编语言?飞行员的座位

在我们进入我们的示例计划之前,让我们谈谈汇编代码值得您的一点。

事实上,处理器是用来运行指令的。汇编代码是这些指令的人类可读的表示法,通常是最接近机器co的代码德。

图1。一个来自Motorola 6800 8位微处理器的汇编语言示例。图片由迈克尔霍莉点击放大。

通过了解程序集,您可以准确地了解特定处理器如何工作原因,因为您可以看到每个指令中的每个位都有它。写作大会让你进入试点座位。它使您可以在最低级别控制机器,同时获得对机器的工作原理的洞察。

你想和一个从未坐在驾驶舱内坐在驾驶舱的人的飞机上吗?当然,他们已经掌握了模拟器;但没有什么比真实的更像。

如何使用树莓派和Linux来汇编和执行汇编程序

让我们使用raspberry pi组装并执行程序来快速循环。

因为我们使用的是树莓派,所以我们使用的是32位的ARM内核。正如在前一篇文章中提到的,这意味着我们关注的是32位ARMV7指令和32位寄存器。(笔记:运行Raspbian的RPi的后续版本使用的是64位ARMV8处理器,但运行它的32位模式就像旧的V7版本一样。)

汇编程序要求指令理解程序的布局方式。然后它使用标签来表示移动到不同的地方。上面显示的程序代表了我们将在汇编程序中使用的基本结构。有关GNU汇编程序的更多信息,在这里是一个快速的参考指南。

第1步:适当地保存代码

Linux命令行是组装程序的最简单方法。

通过键入ctl+alt+t或通过树莓用户界面导航到命令终端打开终端。你的源代码应该写在一个文本编辑器和保存与"。s”扩展。

一旦文件保存在目录中,它可以组装并链接。

第2步:将程序组装到对象文件中

下面,我们从一个名为“myProg”的汇编程序开始。(链接为可下载的。zip文件,在本文的末尾),并将其组装成一个名为“myProg.o”的目标文件。

第3步:创建一个可执行文件

接下来,我们使用链接器将目标文件转换为可执行文件,即本例中的“程序”。

第四步:运行程序

最后,我们运行该计划。

- o myProg。o myProg.s

ld -o程序myprog.o

。/程序

第5步:退出程序

退出标签下的最后一部分是Raspbian操作系统使用的系统调用以退出程序。

_出口:

mov r7,#1 @ set r7 for syscall退出

SWI 0 @执行SYSCALL EXIT

本文末尾包含了一个示例程序,供您开始使用。

更好地了解处理器,编写更有效的代码

在前几篇文章中,我们介绍了ARM指令集中使用的一些基本指令。我们研究了ARM寄存器文件以及它在处理器微架构中的位置。我们还研究了什么是指令看起来像位级别以及装配邮件如何将其编码为这些位。

现在,我们已经将这些信息综合为适用的情况。

这里的最终目标是让您的胃口。写作装配仍在编码,但在最低水平可能。通过这种方式,您实际上可以了解处理器与您的程序进行的内容。通过了解给定处理器的组件,您可以实现令人难以置信的有效代码,执行低级配置,或构建超薄操作系统。越来越多的嵌入式设备使用ARM核心,并且在这些设备上运行的代码必须尽可能高效。

随着高级别语言的不断抽象计算机所做的,更少的工程师和程序员将理解其系统如何实际工作。无论您是对数字设计还是嵌入式系统都感兴趣,知道组装都会为您提供一定程度的理解,这将使艰难的问题更容易,并且复杂的设计更加简单。


你可以下载下面的示例ARM汇编代码:

myprog.s.zip.