Assembly 这是什么汇编语言/体系结构?

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

我偶然发现了这两个文档(它们是用意大利语编写的,尽管代码注释是用英语编写的):

  • 它们描述了我无法识别的汇编指令集和语法。例如,它说下面的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
            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
      B
      这样的指令的出现让我想起了ARM架构
    • 但是,ARM、x86和x86-64中不提供诸如
      HALT
      MOVE
      STORE
      LOAD
      等指令。或者,至少,它们在这些体系结构上有其他名称
    • 该文档指出,该体系结构只有几十条指令。这让我觉得它一定是一个非常古老/嵌入式的体系结构
    • 该文件还指出,指令执行“非常简单的操作”(尽管它没有给出“简单”一词的定义)。这也让我认为它一定是一个非常古老/嵌入式的体系结构
    • 这些文档引用了MIPS,但由于许多原因,MIPS看起来有所不同。例如:文档'
      BLE
      需要一个操作数,而在MIPS中需要三个操作数;MIPS没有
      SVC
      ,它有
      syscall
    • 在网上,我发现它看起来像一个旧的摩托罗拉架构,尽管我无法找到与任何摩托罗拉架构的确切对应关系
    下面是我对语法的看法:

    • 左操作数用作目标,寄存器没有前缀。这让我想起了英特尔的语法
    • 20(SP)
      这样的操作数提醒我AT&T语法(寄存器符号除外)
    • 标签后面不跟冒号
    • 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好吧,如果它没有任何东西可以模仿它,可能是一个假设的处理器,那么提示可能是术语
    泛型汇编
    <这些文本形式的指令称为汇编语言。汇编语言指令和机器代码之间存在着一对一的关联。这些定义不能很好地显示处理器如何执行代码