汇编与JIT编程

duling 2020-02-22

读懂汇编

1 什么是汇编?

??计算机能运行的是二进制的指令,如00000011,为了解决可读性和方便编辑的问题,就诞生了汇编语言,所以汇编语言是二进制指令的文本形式,与二进制指令一一对应,如00000011代表ADD,二进制与汇编语言都是最底层的低级语言。

由CPU指令和指令对应的运算子构成一条汇编语句,如:

mov    %ebx, [%esp+12]
   add    %eax, %ebx

?? 汇编 assembling 的过程,是由汇编器将汇编语言 assembly language (asm) 编译成二进制。

2 汇编程序的运行过程

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 指令:

即时编译 JIT code 的编写

以 AVX512 为例

reference:http://www.ruanyifeng.com/blog/2018/01/assembly-language-primer.html

相关推荐