Assembly 这是什么汇编语言/体系结构?
我偶然发现了这两个文档(它们是用意大利语编写的,尽管代码注释是用英语编写的): 它们描述了我无法识别的汇编指令集和语法。例如,它说下面的C代码Assembly 这是什么汇编语言/体系结构?,assembly,programming-languages,history,Assembly,Programming Languages,History,我偶然发现了这两个文档(它们是用意大利语编写的,尽管代码注释是用英语编写的): 它们描述了我无法识别的汇编指令集和语法。例如,它说下面的C代码 int AddInt( int a, int b ) { int c; c = a + b return c; } …相当于这组装配说明: AddInt ADD SP, #-4 PUSH R0 PUSH R1 PUSH R2 PUSH R3
int AddInt( int a, int b ) {
int c;
c = a + b
return c;
}
…相当于这组装配说明:
AddInt ADD SP, #-4
PUSH R0
PUSH R1
PUSH R2
PUSH R3
LOAD R0, 24(SP)
LOAD R1, 20(SP)
ADD R0, R1
STORE 24(SP), R0
POP R3
POP R2
POP R1
POP R0
ADD SP, #4
RET
我有使用ARM、x86和x86-64指令集的经验,并且了解Intel和AT&T ASM语法。然而,报纸上的描述对我来说是非常新鲜的。以下是我对指令集的看法:
- 像
和SVC
这样的指令的出现让我想起了ARM架构B
- 但是,ARM、x86和x86-64中不提供诸如
、HALT
、MOVE
和STORE
等指令。或者,至少,它们在这些体系结构上有其他名称LOAD
- 该文档指出,该体系结构只有几十条指令。这让我觉得它一定是一个非常古老/嵌入式的体系结构
- 该文件还指出,指令执行“非常简单的操作”(尽管它没有给出“简单”一词的定义)。这也让我认为它一定是一个非常古老/嵌入式的体系结构
- 这些文档引用了MIPS,但由于许多原因,MIPS看起来有所不同。例如:文档'
需要一个操作数,而在MIPS中需要三个操作数;MIPS没有BLE
,它有SVC
syscall
- 在网上,我发现它看起来像一个旧的摩托罗拉架构,尽管我无法找到与任何摩托罗拉架构的确切对应关系
- 左操作数用作目标,寄存器没有前缀。这让我想起了英特尔的语法
- 像
这样的操作数提醒我AT&T语法(寄存器符号除外)20(SP)
- 标签后面不跟冒号
- 像
这样的元指令的前缀不是点。它们甚至不是以元指令的形式出现,而是以真实指令的形式出现eq
- 注释以
开头代码>。这就引出了SPARC汇编,但是SPARC在许多方面是不同的(例如寄存器的前缀是
)%
那么,你对它可能是什么架构有什么线索吗?这是一个假的处理器,没有人真的构建了这样一个真正的32位处理器。这在教育中并不罕见,教师的优先权与芯片设计师的非常不同。它是一个理想化的处理器,不受实际处理器的限制 这是一个非常正交的设计,是什么让你想到了摩托罗拉处理器。68000芯片是他们的经典设计。它存活了相当长一段时间,苹果和许多Unix机器供应商是他们最大的客户。非常狂热的程序员粉丝们,正交设计强烈地吸引着逻辑思考者。但是它没有活下来,这个家庭已经不复存在了。Intel是Dark Vader公司的负责人,该公司一直专注于实用设计。使它们尽可能快且兼容,clean并不重要,因为这是C编译器编写者的问题。速度在任何时候都胜过一切 使用假处理器进行教学有很长的历史。不确定他是否是第一个,但唐纳德·克努特创造了两个有影响力的假设计。他的混合设计是第一个,今天很有趣,只是看看50年前的实际约束是什么样子。当6位字节统治世界,36位处理器很普遍的时候。取而代之的是他的MMIX设计,一个假的64位RISC处理器。重要的是在九十年代后期突破界限。不再是了。兼容性更为重要,处理器不再实际执行机器代码指令。他们翻译它们,就像.NET或Java一样。到一个内部和未记录的微操作执行引擎,该引擎能够同时执行多个微操作,在可能的情况下无序
对于学生来说,在101组装课上接触到的细节太多了。他们需要学习基础知识。堆栈帧(添加sp、#-4)、CPU寄存器(R0、R1等)、将参数传递给函数、寻址模式(24(sp))的概念。今天仍然非常重要的概念。小台阶对于爬到楼梯顶非常重要。@HansPassant你的意思是说,这并不罕见;)@汉帕桑:我能理解你的意思,但从我的预期来看,老师实际上把事情复杂化了。我发现使用AT&T语法的普通x86更易于阅读和编写。而且,我不明白教假东西有什么用。然而,这是另一个故事,不属于这个网站。顺便说一句,如果你把你的评论变成一个答案,我可能会接受。它可能是一个虚拟机,除非你打算剽窃另一个架构,否则你通常需要编写某种语言,我自己也做过,虚拟机的工作有点像你程序集的解释器。@James:没有编译器,该语言提供的解释器或虚拟机。或者,至少,我什么也找不到。这就是我在这里发布的原因。@AndreaCorbellini好吧,如果它没有任何东西可以模仿它,可能是一个假设的处理器,那么提示可能是术语
泛型汇编
<这些文本形式的指令称为汇编语言。汇编语言指令和机器代码之间存在着一对一的关联。这些定义不能很好地显示处理器如何执行代码