汇编语言和机器语言之间有什么关系?

时间:2009-08-10 05:50:34

标签: architecture assembly operating-system

汇编语言和机器语言(对于相同的底层系统)是否真的相同?这两个概念之间有什么不同吗?

10 个答案:

答案 0 :(得分:39)

汇编语言是一种比机器语言更方便的机制。使用汇编语言,您可以使用助记符序列而不是数字操作代码,并且可以使用符号标签而不是手动计算偏移量。它还可以保护您免受真正的愚蠢错误 - 例如输入格式错误的处理器指令。

否则汇编语言相当于机器语言。有时您会有一个旧的汇编程序,它不支持助记符以获取新处理器的某些指令 - 然后您仍然可以将操作代码直接插入到程序中。

答案 1 :(得分:17)

机器语言是CPU的操作码的“位编码”。

Assembly langauge是CPU的操作码的“符号编码”。

因此,例如符号:

loop:  dec R1    # Decrement register R1
       bnq loop  # Branch if not equal to zero to
                 # address "loop"

成为比特编码:

# Mythical CPU Machine code 4 bits operation,
#                           4 bit "option"
       0x41      # 4 is a "dec" and represents r1;
       0x7E      # 7 is bnq and E means PC -2;

通常它是一对一的关系,但是一些汇编语言会在一些情况下具有额外的汇编指令,这些指令映射到多个机器代码指令或重用另一个操作码。例如使用机器代码“xor R1,R1”作为“clr R1”或类似的东西。

此外,汇编语言将倾向于支持“宏编程”,在80年代,当广泛使用汇编时,源代码具有更“高级”的外观。我亲自编写了看起来像“plot x,y”和“Hex Val”的汇编宏来简化常见操作。

例如:

# Mythically CPU Macro
.macro spinSleep x,y
            ld #x,y
localLoop:  dec y
            brq localLoop
.endmacro
# Macro invocation
            spinSleep 100,R1
# Macro expantion
            ld #100,R1
localLoopM: dec R1
            brq localLoopM   # localLoopM is "Mangled" for localization.

答案 2 :(得分:7)

我发现了一个非常好的解释,想在这里发布,以便其他人可以阅读它:

  

机器语言是实际位   用来控制处理器   计算机,通常被视为一个序列   十六进制数(通常为   字节)。处理器读取这些位   从程序存储器和位   代表什么的“指示”   做下一个。因此机器语言   提供了进入的方式   指令进入计算机(是否   通过开关,穿孔带或a   二进制文件)。

     

汇编语言更加人性化   机器语言的可读视图。   而不是代表机器   语言作为数字,说明   和寄存器给出了名称   (通常是缩写词,或   助记符,例如ld表示“加载”)。不像   高级语言,汇编程序是   非常接近机器语言。   主要的抽象(除了   助记符)是标签的使用   而不是固定的内存地址,和   评论。

     

汇编语言程序(即a   文本文件)被翻译成机器   汇编语言。一个   反汇编程序执行相反的操作   功能(虽然评论和   标签的名称将是   在汇编程序中丢弃。)

来源:What is difference between machine language and assembly language?

答案 3 :(得分:5)

在汇编中,指令是更容易理解的CPU指令表示。

但是汇编程序也可以使解决更容易:

  • 在机器语言中,你必须知道你所在的位置和你想要跳到的地方之间的距离(在地址空间中)
  • 在汇编语言中,您调用一个地址“iWantToJumpHere”,然后您可以说“jump iWantToJumpHere”

这使得装配更容易维护,尤其是当地址之间的距离发生变化时。

答案 4 :(得分:1)

机器语言就是芯片所理解的 装配是你理解的

每个汇编指令都有一个等效的机器语言。 x86有一些单字节指令,但它们的长度可变,最长可达15个字节(包括可选的前缀)

 machine code bytes |   x86 assembly language
8D B0 00 36 65 C4    lea    esi, [eax - 1000000000]     
BB 00 FC FF FF       mov    ebx, -1024
43                   inc    ebx
41                   inc    eax
3B CA                cmp    ecx,edx
C3                   ret

C5 F5 72 D2 01       vpsrld ymm1,ymm2,0x1        ; AVX2
C5 F5 D4 6D 88       vpaddq ymm5,ymm1,YMMWORD PTR [ebp-0x78]
C5 CD D4 AD 68 ff ff ff vpaddq ymm5,ymm6,YMMWORD PTR [ebp-0x98]

答案 5 :(得分:1)

机器语言

机器语言由一和零组成。因此,通过查看很难理解。因此,如果我们要修改代码,这将是一个巨大的问题。机器语言也是一种编程语言(第一代)。我们的计算机CPU可以直接执行该机器代码,而无需任何汇编程序。

汇编语言

汇编语言由语法,数字和字母组成。修改现有代码很容易。因此我们的机器无法理解该程序。因此机器使用汇编程序将汇编语言代码转换为机器代码。

答案 6 :(得分:0)

汇编级语言是通过允许程序员编写助记符而不是二进制代码(机器代码)来使编程变得简单的第一个有意识的步骤。

答案 7 :(得分:0)

机器语言:

  1. 这是第一代编程语言
  2. 比汇编语言困难
  3. 人类很难理解
  4. 它的形式为0s和1s
  5. 机器语言因平台而异
  6. 无法轻易改变
  7. 不支持修改
  8. 存在错误的风险很高
  9. 二进制代码无法记忆
  10. 无需编译器
  11. 汇编语言:

    1. 这是第二代编程语言
    2. 它比机器语言困难
    3. 人类容易理解
    4. 它使用符号说明,数据项的描述性名称和内存位置
    5. 汇编语言取决于平台
    6. 很容易修改
    7. 支持更改
    8. 发生错误的风险降低
    9. 可记忆性很高
    10. 需要编译器并且知道为汇编程序

答案 8 :(得分:0)

首先,汇编语言将汇编语言转换为机器语言。将其存储在内存(RAM)处理器/杯中,然后从内存中进行存储以进行注册并遵循指令集。

答案 9 :(得分:-3)

汇编语言是人类理解的操作码(操作码)的符号编码,仅用于指示计算机处理器(硬件操作)和机器人(机器人操作)执行特定任务。这对人类来说是一种可以理解的语言。该语言仅用于指示硬件操作,绝对不用于创建软件程序。汇编程序用于将操作码(操作代码)的这个符号编码部分转换为机器语言。操作代码(操作码)是机器语言的一部分。