我正在寻找详细介绍汇编编程原理且不以x86为目标架构的文本。我没有找到最近的类似书籍,但我希望在20世纪70年代和80年代有一些好的书籍,当时整个应用程序仍然使用汇编语言编写。所使用的架构也应该是比较干净的设计之一,例如6502或VAX。
这并不是一本经典的书(最初出版于90年代),但我从Patterson和Hennessy的《计算机组成与设计:硬件/软件接口》(ISBN:0123706068)中学习了MIPS汇编语言。这本书并不严格讲解汇编语言,而是一本计算机体系结构教材。但MIPS是一种相当干净的架构。
虽然我想如果您在寻找经典著作,您可能正在寻找深入探讨的内容。
我怀疑它是否还在印刷中,但是我1977年上大学的计算机科学课使用了CDC Cyber,这是Seymour Cray的架构之一。(天哪!它在亚马逊上!)实际上,它是一个相当不错的汇编语言。它包括一个称为微型的独特功能,类似于宏,但更灵活,可用于字符串操作,例如在大约三行源代码中创建符号label1
到label999
。
实际上,在那个时候,整个应用程序都很少用汇编语言编写。我知道有一个文本编辑器是用汇编语言编写的,操作系统的很大部分也是,但很少有应用程序。
除此之外,我不记得有任何好的汇编语言书籍了。但是我的接触很有限,因为第二门计算机科学课程使用了新的Motorola 6800,并且只有一些杂乱无章的笔记记录。后来我们在Unix v6上使用C语言,但没有要求编写汇编语言,只有少数练习需要阅读和理解PDP-11汇编语言,特别是对于内核阅读课程,尽管98%的内核是用C语言编写的。
经过所有这些接触,我了解了足够多的CPU和汇编器,以至于我很少需要更多的制造商处理器架构参考和汇编器,除了iNtel处理器。一个大挑战是DEC的RSX线程编译器输出语言,它完全由一系列汇编宏组成。但是大多数处理器都很容易理解和编程,包括Texas Instruments 9900、Motorola 68000和68010、Z80、6502、VAX 750以及TMS 16016/32032。
iNtel家族的处理器非常难以理解,包括8086和8047/8052家族。高度不正交且充满奇怪的模式:为什么可以直接交换AX
和BX
,但不能交换DS
和ES
?特别是在80386推出后,在保护模式下加载段寄存器会导致巨大的时钟周期惩罚。然后还有奇怪的段控制伪指令、段类和代码定位器——链接后的目标代码的后处理。很多奇怪而笨拙的工具。
我认为关于20世纪70年代和80年代处理器的书籍市场很小,你可能只会找到制造商的文档(如果有的话)。
我相信大部分都被丢进了垃圾填埋区,但是也许有些被业余爱好者保存了下来。
从Motorola、MOS Technology、Digital Equipment Corporation等公司中搜索PDF格式的存档资料可能是值得的。