我读到了 LC-3 是如何工作的,但我一生都无法弄清楚如何在 LC-3 程序集中进行编码。我的目标是能够编写简单的程序,例如生成斐波那契数或对数组进行排序。
有人可以指点我的资源来学习这个吗?我精通 Python 和 Java,所以这些问题背后的基本逻辑对我来说很清楚。
学习汇编语言有几个方面,它是处理器机器代码的人类可读版本。
基本上其他语言处于逻辑级别,而机器代码非常处于物理级别
一方面,这尤其体现在存储概念上的差异:
因此,当我们编写汇编语言时,我们翻译了我们的伪代码:具有许多生命周期有限的类型变量的逻辑代码,部分是通过将逻辑变量映射到固定的物理资源上。变量通常比 CPU 寄存器多,尤其是当某些寄存器具有专用用途时,例如堆栈或返回地址。
另一方面,今天的其他语言通常采用结构化编程,而在汇编语言/机器代码中,我们有 if-goto-label。
所有结构化语句在 if-goto-label 中都有翻译。每个翻译都是将结构化形式的模式转换为 if-goto-label 形式的模式。正确地遵循模式,您将重现伪代码的控制流——在这里很容易走捷径并犯令人困惑的错误,因此我鼓励在这里采用有条不紊的方法。
其他语言有丰富的表达方式:有许多优先级的运算符,以及使用()
's 的复杂程度。机器代码的指令(通常)最多需要 3 个操作数。
函数调用、堆栈帧、参数传递、返回值是一个相当深入的主题,函数序言和结语。
有关详细信息,请参阅以下一些资源: