Assembly 汇编语言-多种类型?

Assembly 汇编语言-多种类型?,assembly,Assembly,几周后我开始上大学(软件工程学位),我知道我第一年要学习的模块之一是“架构基础”或类似的东西;基本上,它是学习在“汇编”中编程 我想做一些背景知识的学习,所以我已经准备好了(我在其他单元上也做过同样的学习),但不知道是否有不止一种“汇编语言”。有多少人?是每个制造商一个,32位和64位语言,还是只有一个标准 如果有不止一种类型,那么在大学级别上最“流行”或最有可能教授的是什么?汇编语言有很多很多种类型。目前最流行的是ARM、MIPS和x86。ARM应用于许多手机和嵌入式系统。MIPS在ibmcp

几周后我开始上大学(软件工程学位),我知道我第一年要学习的模块之一是“架构基础”或类似的东西;基本上,它是学习在“汇编”中编程

我想做一些背景知识的学习,所以我已经准备好了(我在其他单元上也做过同样的学习),但不知道是否有不止一种“汇编语言”。有多少人?是每个制造商一个,32位和64位语言,还是只有一个标准


如果有不止一种类型,那么在大学级别上最“流行”或最有可能教授的是什么?

汇编语言有很多很多种类型。目前最流行的是ARM、MIPS和x86。ARM应用于许多手机和嵌入式系统。MIPS在ibmcpus上很流行,在Macs、一些视频游戏机等系统上也可以找到,我确信我缺少一些。x86汇编程序用于英特尔个人电脑。每种风格都有不同的版本,涵盖从16位到64位指令的gammut。关于组装,旧的架构往往会消亡,新的架构也会出现,但RISC风格的系统所做的基本事情基本相同。这只是学习系统之间的记忆法的问题。Move、Mov、Load等。所有这些都用一个值加载寄存器。它真的和其他语言一样。一旦你学会了一个,就很容易学会新的。您可能会遇到一些较旧的机器,它们是Z80、68000、6502和6510,这取决于您想要回到的机器的距离

希望有帮助

但不知道是否有不止一种“汇编语言”

同一CPU的不同汇编程序(如Gnu和Microsoft)可能具有不同的汇编语言语法;但差别很小,因为它们都针对同一个CPU,并且在汇编指令和CPU操作码之间存在1对1映射(如果忽略宏)

更大的区别在于不同类型的CPU之间

有时,不同的CPU支持相同的操作码(因此可以被相同的汇编程序瞄准),因为它们被设计为通过执行相同的机器语言相互兼容或竞争

但有时它们是不同的:请参阅。

一般来说:

  • 对于每种不同类型的CPU,必须至少有一种完全不同的汇编语言(因为汇编语言与机器代码直接相关)

  • 对于每种类型,可能有两种或两种以上的汇编语言(例如“英特尔语法”与“AT&T语法”)

  • 每种语言都可能有许多方言,指令的语法略有不同,预处理器完全不同,指令也完全不同


如果(使用从无到有的随机数)假设有50种不同类型的CPU,每个CPU平均使用1.5个类别,每个类别平均使用2种方言;然后就可以计算出150种不同的汇编语言。

如果你想抢先一步,我建议你联系大学的某个人(教授或系秘书),了解将使用哪种汇编语言。有些大学甚至不使用“真正的”汇编语言,更喜欢创建一种合成语言供学生学习。@Blair这是个好主意,我会这么做的。我真的希望我最终不要使用合成语言——那将是非常令人失望的。我的大学使用MIPS教授了同等的课程,这是一种相对简单的RISC(精简指令集)汇编语言。很可能他们不会教授如何使用x86(英特尔32位汇编语言,可能是编译器最常使用的语言),原因很简单,因为x86集合中有太多神秘的指令,它们随着时间的推移不断演变,以提供各种优化。这里有一些关于MIPS的信息:如果你发现他们在教MIPS,你可以自己用SPIM玩一玩,这很可能是你在课堂上会用到的。你可以在这里找到一个基于网络的SPIM版本:你混淆了MIPS(与摩托罗拉无关)和IBM的PowerPC(用于旧Mac、Xbox 360、PS3、Gamecube/Wii/WiiU)。指令的操作码是MIPS中的6位。每条指令总是32位。x86的语法族和方言可能比任何其他ISA都多。但是,如果你考虑汇编指令(不是指令语法本身),那么对于多个CPU有多个方言。随着Go语言发明了自己的asm语法,我想这是它被移植到的许多ISA的另一种风格。@PeterCordes:有趣的是,我渴望发明自己的“dest OP src”语法,以便于查看指令依赖性等(例如,“这个寄存器的值从何而来?”您可以扫描左边的列)。只是普通的文本编辑器正确地证明了“dest”部分是痛苦的,有趣的。您可以通过
OP\t dst,\t src
的编码样式将两个操作数对齐到一个一致的列,从而获得最大的好处。但是是的,emacs的asm模式在那里有些欠缺。