简介
一本教授ARM 64位ISA上的汇编语言编程的书。在此过程中,提供了直接适用于高级语言的良好编程实践和对代码开发的见解。
项目地址
https://github.com/pkivolowitz/asm_book
汇编语言编程简介
这本教科书简要介绍了汇编语言程序设计。这个介绍之所以“温和”,是因为它假设读者已经熟悉 C 或 C++ 编码。我们使用这些假定的知识向后桥接低级 ISA(指令集架构)。
我们把一个非常尖锐的观点带回家:C是一种高级汇编语言,汇编语言没什么好害怕的。
这本书是为谁准备的?
如前所述,如果您已经熟悉 C(或从 C 派生的语言,例如 C++),那么本书将从您已经了解的内容开始。后面的章节更深入地探讨了 ARM V8 ISA 的各个角落,适合那些希望掌握 64 位 ARM 处理器丰富指令集的读者。
这本书可以用于涵盖汇编语言的课程吗?
是的,一点没错。
事实上,我们认为汇编语言的学习对于培养称职的软件工程师是极其重要的。此外,我们认为教授 x86 指令集是残酷的,因为 ISA 诞生于 1970 年代,并且随着时间的推移变得更加混乱。
MIPS 指令集是大学水平课程中经常介绍的另一种 ISA。虽然比 x86 ISA 更友好、更温和,但 MIPS 处理器的相关性不如 ARM 系列。手机、平板电脑、笔记本电脑甚至台式机都包含 ARM V8 处理器,这使得对 ARM ISA 的研究更加热门。也许更“酷”。
本书中使用的调用约定
汇编语言编程非常依赖于底层硬件架构。主机操作环境在决定如何构建汇编语言程序方面起着巨大的作用。“调用约定”是指如何调用函数以及如何传递参数。
在本书中,我们将使用 ARM LINUX 约定。这表示:
-
您将需要在 Macintosh 上运行 ARM Linux VM——即使是在基于 ARM 的 Mac 上。为什么?苹果。这就是为什么。
-
您将需要在基于 ARM 的 Windows 机器上运行 WSL(适用于 Linux 的 Windows 子系统)。这些确实存在!
-
您将需要在基于 x86 的 Windows 机器上运行 ARM Linux VM。
很多名字
与 ARM 设计一样值得称赞的是,ARM 对其知识产权的命名约定非常糟糕。在本书中,AARCH64 和 ARM V8 被视为 64 位 ARM 指令集体系结构 (ISA) 的同义词。
很难在 ARM 站点上找到文档,因为它们有很多版本,同一事物的名称很多,一般文档也很多。这真的很让人抓狂。
在文本中,我们将酌情提供相关链接。
第 1 节 – 从 C / C++ 到汇编语言的桥接
我们首先提供我们所说的从 C 和 C++ 到汇编语言的“桥接”。我们使用您已有的知识来学习新知识——这多酷啊!
Chapter | Content |
---|---|
1 | Hello World |
2 | If Statements |
3 | Loops |
…. a | …. While Loops |
…. b | …. For Loops |
…. c | …. Implementing Continue |
…. d | …. Implementing Break |
4 | Interludes |
…. a | …. Registers |
…. b | …. Load and Store |
…. c | …. More About ldr |
…. d | …. Register Sizes |
5 | switch |
6 | Functions |
…. a | …. Calling and Returning |
…. b | …. Passing Parameters |
…. c | …. Calling common C runtime functions |
7 | FizzBuzz – a Complete Program |
8 | Structs |
…. a | …. Alignment |
…. b | …. Defining |
…. c | …. Using |
9 | const |
10 | Casting |
第 2 节 – 浮点数
浮点运算使用它们自己的指令和它们自己的一组寄存器。因此,浮点运算包含在它们自己的部分中:
Chapter | Content |
---|---|
1 | Floating Point |
…. a | …. What Are Floating Point Numbers? |
…. b | …. Registers (simplified) |
…. c | …. Literals |
…. d | …. fmov Not Yet Written |
…. e | …. Conversion To / From Integers |
…. f | …. Four Basic Operations Not Yet Written |
…. g | …. Selected Additional Operations Not Yet Written |
…. z | …. Half Precision Floats |
第 3 节 – 位操作
如果没有bit bashing,一本关于汇编语言的书会怎样?
Chapter | Content |
---|---|
1 | Bit Fields |
…. a | …. Without Bit Fields |
…. b | …. With Bit Fields |
…. c | …. Review of Newly Described Instructions |
第 4 节 – 更多内容
Chapter | Content |
---|---|
— | Determining string literal lengths for C functions |
项目
以下是一些项目规范,可以为您不断提高的掌握程度提供挑战。
DIRENT项目演示了如何在汇编语言中使用复合体。struct
关于作者
Perry Kivolowitz 在计算机科学领域的职业生涯跨度不到五年。他创办了超过 5 家公司,主要涉及硬件、图像处理和视觉效果(用于电影和电视)。Perry 因其在巴比伦 5 试播集 The Gathering 中的工作而获得艾美奖认可。后来,他与 SilhouetteFX, LLC的同事一起获得了艾美工程奖。SilhouetteFX 几乎用于每一个重要的电影中,用于旋转观察、绘画、跟踪、2D 到 3D 重建、合成等。
1996 年,佩里 因其发明的形状驱动变形和变形技术获得了奥斯卡科学技术成就奖。这是在阿甘正传、泰坦尼克号和星际之门中产生许多著名效果的技术。
222 年标志着 Perry 在大学级别教授计算机科学的第 18 个年头,在威斯康星大学麦迪逊分校任教 10 年,现在在迦太基学院任教 8 年。
汇编语言是 Perry 在以下 ISA 工作的热情所在:
-
Univac 1100
-
数字设备公司 PDP-11
-
数字设备公司VAX-11
-
摩托罗拉 68000
-
ARM以AARCH64开头
这部作品献给我的妻子 Sara 以及儿子 Ian 和 Evan。
没有回复内容