汇编与JIT编程

Posted qccz123456

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编与JIT编程相关的知识,希望对你有一定的参考价值。

读懂汇编

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

以上是关于汇编与JIT编程的主要内容,如果未能解决你的问题,请参考以下文章

如何获得即时编译器(JIT)的汇编代码(linux环境下)

JVM优化之循环展开(附有详细的汇编代码)

[转帖]软件的变革与 AOT

从JVM的角度看JAVA代码--代码优化

是否可以完全用托管的 .NET 语言编写 JIT 编译器(本地代码)

Android 逆向使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )(代码片段