我可以在 Motorola 68HC11 和其他处理器(如 ARM 或 x86 处理器)中执行汇编代码吗?

问题描述 投票:0回答:1

我的工程老师是一个非常固执的人,他想使用已经消失多年的芯片。我的问题是,我可以为我的计算机学习汇编语言并在摩托罗拉中使用它,还是我必须学习摩托罗拉特定的汇编语言?

我在网上搜索了一下,但没有遇到这样的具体问题。所以希望大家能帮忙。

assembly microprocessors motorola 68hc11
1个回答
0
投票

您不能直接在不同的CPU上运行68HC11机器代码,也不能在68HC11上运行ARM或x86机器代码。 您可以(并且应该)在您使用的任何计算机上安装 68HC11 仿真器/模拟器,这样您就可以单步执行 68HC11 代码并观察寄存器值(和内存)的变化,并查看执行路径,例如分支是否采取与否。这对于学习汇编极其重要;在没有调试器的情况下做这件事就像试图蒙住眼睛建造一个机器人一样。如果代码没有按照您的预期进行,您只需单步执行,直到发生令人惊讶的事情,而不必在头脑中仔细模拟,因为很难避免犯同样的错误,导致您以这种方式编写代码第一名。

一旦你学习了一个 ISA 的汇编,学习其他架构就容易多了,因为大多数基本概念都是相同的,只是不同的寄存器和指令,可能还有一组不同的寻址模式等。但是因为你需要了解您正在学习的课程的 68HC11 汇编,首先从手册和教科书中学习。

即使您最终从未使用 68HC11 微控制器或其后继者之一完成实际项目,简单的 8 位 CPU 也是学习汇编语言的完全合理的方法。如果您还没有熟悉整数位模式的十六进制和二进制表示,那么可能会感到满意。要了解其他 ISA,只需查看其寄存器图和 ISA 快速参考表,或者阅读快速教程或观看类似 Matt Godbolt 的 CppCon2017 演讲“我的编译器最近为我做了什么?”的视频。打开编译器的盖子”,其中对 x86-64 进行了简要介绍。特别是在您学习了 2 或 3 个不同的 ISA 之后,您将更好地了解主流 ISA 中哪些内容可以不同,哪些概念相同。 (另请参阅如何从 GCC/clang 汇编输出中删除“噪音”?,尽管 68HC11 的一个缺点是我认为 GCC 或 Clang 无法对其进行编译,因此您无法使用它们来举例说明如何在 asm 中做简单的事情,例如加载+取消引用指针)。

https://en.wikipedia.org/wiki/Motorola_68HC11 包含手册和其他一些资源的链接。 68HC11 是一个累加器架构(只有几个寄存器,尽管其中 2 个应该用作累加器,因此希望可以成为 add 等指令的目的地)。

因此,与 AArch64 或 x86-64 等现代 ISA 的相同程序相比,您的程序往往有更多的存储/重新加载。但简单的8位ISA是非常合理的。很高兴您不必像某些学生那样处理 8086 的复杂性和分段内存寻址,也不必学习一堆与主流 POSIX 或 Windows 显着不同的过时的 DOS 系统调用 API。

对于可能需要处理大于 255 的数字的实际程序,8 位机器学习起来会很不方便。但希望你的老师会从只使用少量数字的程序开始。 (希望能够做 8 位 CPU 可以做的事情,而不会遇到太多麻烦。)

与 32 位或 64 位寄存器相比,在调试器中只需要查看两个十六进制数字即可。较小的体系结构状态(寄存器)对于单步调试和在您的脑海中跟踪程序状态的“实时”部分可能是一件好事,尽管这意味着您的某些程序状态可能必须位于内存中。

© www.soinside.com 2019 - 2024. All rights reserved.