我正在寻找详细处理汇编编程原则并且不使用 x86 作为目标架构的文本。我最近没有找到任何类似的书,但我希望在 1970 年代和 1980 年代有一些好的书,当时整个应用程序仍然是用汇编语言编写的。使用的架构也应该是更简洁的设计之一,例如 6502 或 VAX。
11 回答
这不是一本经典的书(最初出版于 90 年代),但我从计算机组织和设计中学习了 MIPS asm:Patterson 和 Hennessy 的硬件/软件接口(ISBN:0123706068)。这本书不是严格地关于组装的。这是一本计算机体系结构教科书。但是 MIPS 是一个相当干净的架构。
虽然我想如果你想要一部经典作品,你可能正在寻找对作品相当深入的东西。
我还会根据我当时在汇编程序中编程的内容来查看 6809 和 68000 芯片组组件的“更清洁设计”。
更进一步,我实际上发现 IBM 360/670 汇编程序集非常容易编码。具体的文本——如果你想在登记管理等方面获得很好的基础,可以找一些旧的教科书。我可能在某个地方的书架上放了一本,当我有机会时,我会看看尘土飞扬的角落。
不知道为什么,但我不喜欢旧施乐 PC 中的 Z80,出于某种原因,这很痛苦。
TI的msp430是一个很不错的架构,第一次看到就让我想起了pdp11。就书籍而言,我不知道我开始写一本但从未完成……反正可能不是你要找的那种。
我怀疑它是否仍在印刷中,但我在 1977 年开始的大学 CS 课程使用的是CDC Cyber ,这是 Seymour Cray 的架构之一。(Holy Moly! 它在亚马逊上!)实际上它是一种相当不错的汇编语言。它包括一个称为micros的独特功能,它有点像宏,但对于字符串欺骗更灵活,例如label1
通过label999
大约三行源代码创建符号。
实际上,在那个时候,整个应用程序并不常用汇编语言编写。我知道有一个文本编辑器,操作系统的好部分当然是,但很少有应用程序。
除此之外,我不记得有任何好的汇编语言书籍。但是我的接触是有限的,因为第二个 CS 课程使用了新的摩托罗拉 6800——并且这是由一个特别的笔记集记录的。在后来的几年里,我们在 Unix v6 上使用了 C,但不需要编写汇编,只有一些练习对阅读和理解 PDP-11 汇编语言很有用,尤其是内核阅读课,尽管 98% 的内核是用C
.
在经历了所有这些之后,我知道了足够多的 CPU 和汇编器,除了 iNtel 处理器之外,我几乎不需要比制造商的处理器架构参考和汇编器更多的东西。一个很大的挑战是 DEC 的 RSX 线程编译器输出语言,它完全由一系列汇编器宏组成。但大多数处理器都易于理解和编程,包括德州仪器 9900、摩托罗拉 68000 和 68010、Z80、6502、VAX 750 和 TMS 16016/32032。
iNtel 系列处理器非常难以理解,包括 8086 和 8047/8052 系列。高度非正交且加载了奇怪的模式:为什么AX
和BX
可以直接交换,但不能DS
和ES
?尤其是在 80386 推出之后——在保护模式下加载段寄存器会导致巨大的时钟周期损失。然后是奇怪的段控制伪指令、段类和代码定位器——链接后目标代码的后处理。许多奇怪,笨拙的工具。
我认为关于 1970 年代和 1980 年代处理器的书籍市场很小,如果有的话,你只能找到制造商的文档。
我敢肯定,其中大部分最终成为垃圾填埋场,但也许其中一些是由业余爱好者保存的。
可能值得搜索来自摩托罗拉、MOS Technology、Digital Equipment Corporation 等的 PDF 格式的存档材料。
Alexander Stepanov 在他的笔记的第 1 讲中谈到了他对“结构化”汇编编程思想的转变。为了跟进这个想法,我搜索了诸如“Foo 中的结构化汇编编程”之类的书籍。但是我发现的结果是对某些处理器架构的覆盖,而不是程序设计的原则。这里其他答案中提到的大多数书籍都与此一致。
我看过 Knuth 的 AoCP,它确实很详细并且确实使用了 MMIXAL。但除了第 1 节中的一小部分,第 1 章。1.4,是算法设计,不是程序设计。因此,它确实属于 Cormen 等类别。人。“算法导论”。
所以也许没有像我想要的那样的东西。
克里斯托伦斯最近更新了罗伯特瓦格纳的装配线,并进行了各种更正。这对我开始有很大帮助。