duling 2020-02-22
??计算机能运行的是二进制的指令,如00000011
,为了解决可读性和方便编辑的问题,就诞生了汇编语言,所以汇编语言是二进制指令的文本形式,与二进制指令一一对应,如00000011
代表ADD
,二进制与汇编语言都是最底层的低级语言。
由CPU指令和指令对应的运算子构成一条汇编语句,如:
mov %ebx, [%esp+12] add %eax, %ebx
?? 汇编 assembling 的过程,是由汇编器将汇编语言 assembly language (asm) 编译成二进制。
int add_a_and_b(int a, int b) { return a + b; } int main() { return add_a_and_b(2, 3); }
通过 gcc -S example.c
将C程序得到简化的汇编程序:
_add_a_and_b: push %ebx mov %eax, [%esp+8] mov %ebx, [%esp+12] add %eax, %ebx pop %ebx ret _main: push 3 push 2 call _add_a_and_b add %esp, 8 ret
Stack 与 帧 的概念
mov 指令:
push 指令:
add 指令:
pop 指令:
ret 指令:
以 AVX512 为例
reference:http://www.ruanyifeng.com/blog/2018/01/assembly-language-primer.html