汇编语言和机器语言(对于同一个底层系统)真的一样吗?这两个概念有什么区别吗?
9 回答
汇编语言是一种优于机器语言的便利机制。使用汇编语言,您可以使用助记符序列而不是数字操作代码,并且可以使用符号标签而不是手动计算偏移量。它还可以保护您免受真正愚蠢的错误 - 例如输入格式错误的处理器指令。
否则,汇编语言等同于机器语言。有时你会有一个旧的汇编器不支持新处理器的某些指令的助记符——那么你仍然可以直接将操作代码插入程序中。
机器语言是 CPU 操作码的“位编码”。
汇编语言是 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.
我找到了一个非常好的解释,想把它贴在这里,以便其他人可以阅读:
机器语言是用于控制计算机中处理器的实际位,通常被视为十六进制数字序列(通常是字节)。处理器从程序存储器中读取这些位,这些位代表下一步要做什么的“指令”。因此,机器语言提供了一种将指令输入计算机的方法(无论是通过开关、穿孔磁带还是二进制文件)。
汇编语言是机器语言的一种更易于阅读的视图。不是将机器语言表示为数字,而是给指令和寄存器命名(通常是缩写词或助记符,例如 ld 表示“加载”)。与高级语言不同,汇编程序非常接近机器语言。主要的抽象(除了助记符)是使用标签而不是固定的内存地址和注释。
汇编语言程序(即文本文件)由汇编程序翻译成机器语言。反汇编程序执行相反的功能(尽管注释和标签名称将在汇编程序过程中被丢弃)。
资料来源:机器语言和汇编语言有什么区别?
在汇编中,指令是 CPU 指令的更易于理解的表示。
但是,例如,汇编器也使寻址更容易:
- 在机器语言中,你必须知道你所在的位置和你想跳转到的位置之间的距离(在地址空间中)
- 在汇编语言中,您将一个地址称为“iWantToJumpHere”,然后您可以说“jump iWantToJumpHere”
这使得组装更容易维护,尤其是当地址之间的距离发生变化时。
机器语言就是芯片能理解的东西 汇编就是你能理解的东西
每条汇编指令都有对应的机器语言。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]
汇编级语言是通过允许程序员编写助记符而不是二进制代码(机器代码)来使编程变得简单的第一个有意识的步骤。
汇编语言首先由汇编程序转换为机器语言。它存储在内存(RAM)处理器/杯子中,将其从内存中取出并存储到寄存器中,并一个接一个地遵循指令集。
机器语言
机器语言由 1 和 0 组成。所以看着它很难理解。所以如果我们想修改代码,那将是一个巨大的问题。机器语言也是一种编程语言(第一代)。我们的计算机 CPU 无需任何汇编程序即可直接执行该机器代码。
汇编语言
汇编语言由语法、数字和字母组成。修改现有代码很容易。所以我们的机器无法理解那个程序。所以机器使用汇编程序将该汇编语言代码转换为机器代码。
汇编语言是人类可以理解的操作码(操作码)的符号编码,仅用于指示计算机处理器(硬件操作)和机器人(机器人操作)执行特定任务。这是人类可以理解的语言。该语言仅用于指导硬件操作,绝不能用于创建软件程序。汇编器用于将操作码(操作码)的符号编码部分转换为机器语言。操作码(Opcode)是机器语言的一部分。