译者 | 马超 责编 | 欧阳姝黎
出品 | CSDN(ID:CSDNnews)
如果编程本身就是一门艺术,那么汇编语言的编程就是编程领域中的皇冠,在这个基础软件全面回归的时代,汇编语言似乎再次焕发了青春,根据 TOBIE 发布的编程语言排行榜,汇编语言重回前十,虽然这是 X86、ARM、单片机等等所有平台的汇编语言加在一起才取得的成果,不过在笔者的印象中上次汇编语言取得这样的成绩还是上个世纪 90 年代的事。
汇编语言对于操作系统,数据库,人工智能框架等核心基础软件有着不可取代的作用,从笔者了解到的情况看,比如龙芯对于 OpenJDK 的贡献已经达到了全球前五名,这其中最为关键的贡献方向就是将 Java 虚拟机针对 Looongarch 指令集进行专项优化,可以说熟练掌握一种汇编语言是高阶程序员的必经之路。
当用户使用 C、C 或任何其他高级语言时,编译器决定了程序的艺术。然而这一次,我们将自行面对 CPU,新手实现面向指令集编程的艺术,本文使用RISC-V 为例来向大家展示,来如何使用编写语言设计程序逻辑,并最终将程序逻辑转换为汇编语言的程序。
译者对于原文(https://blog.stephenmarz.com/2021/05/12/tips-to-writing-assembly/)进行了一定的修订与校对。
用合适的语言设计逻辑
对于初学者来说,这是最难的一步,因为现在学生们常用的高级语言中,往往使用更抽象的工具进行逻辑设计,许多学生想直接编写完整的功能模块。但是对于汇编语言来说,这是一种注定要失败的方法。相反,为了把逻辑和语言分开,我们必须用我们理解的语言来设计程序逻辑。
如果一个学生不懂 C 或一些低级语言,那么我建议他们用伪码写。因为用太高级的语言如 Java 其实是面向虚拟机编程的,这会增加程序逻辑到汇编语言的转换难度,而使用太低级的语言会使程序逻辑设计变得困难。因此,我推荐 C 或 C ,在将代码进行转换的时候,最好将有对应的代友横向放在一起,一些编辑可以把它们并排放在一起,这是很有帮助的。
说实话这部分虽然看似平平无奇,但却让我颇感到意外,因为 C 语言和汇编的对照完全可以通过 gcc 的 -o -g 参数以及 objdump 实现。