go汇编
2024-05-23 本文已影响0人
呦丶耍脾气
运行输出汇编指令
go tool compile -S -N -l main.go
常用指令
指令 | 解释 |
---|---|
MOVQ: | 将数据从源操作数移动到目标操作数。 |
ADDQ、SUBQ、MULQ、DIVQ: | 对整数进行加、减、乘、除运算。 |
ANDQ、ORQ、XORQ: | 对整数进行按位与、或、异或运算。 |
XORPS | 对两个浮点寄存器中的值执行异或操作 |
CMPQ: | 比较两个整数。 |
JMP: | 无条件跳转。 |
Jcc: | 根据条件跳转,例如 JZ(等于零时跳转)、JNZ(不等于零时跳转)。 |
JLS(jump if less than or equal to) | 比较两个操作数的大小,并根据比较结果进行跳转 |
LEAQ: | 将有效地址加载到寄存器。 |
MOVSB、MOVSL、MOVSD: | 将字节、字或双字从源操作数移动到目标操作数。 |
FUNCDATA | 将函数数据加载到内存中 |
TESTB | 测试一个字节的值,将一个字节的值与0xFF(255)进行按位与运算,然后将结果存储回原来的寄存器 |
HALT: | 停止程序执行。 |
NOP: | 空操作。 |
SWI: | 软件中断。 |
TRAP: | 陷阱指令。 |
关键字
关键字 | 解释 |
---|---|
AX | 寄存器,用于临时存储数据、计算结果或作为函数调用的返回值 |
AL | 处理器的寄存器,存储操作数的低 8 位 |
BP | 基指针寄存器(Base Pointer Register),BP寄存器被用来保存当前函数的栈帧的起始位置 |
CX | 寄存器,通常用于在循环和分支指令中计数 |
SP | 指栈指针(Stack Pointer) |
TEXT: | 定义程序入口点(运行时的函数)。 |
DATA: | 定义全局数据。 |
GLOBL: | 使符号在链接程序中全局可见。 |
SIZE: | 为符号或函数指定大小。 |
LOCAL: | 定义函数内部局部变量。 |
TLS(Thread-Local Storage) | 用于存储线程局部变量 |
PCDATA(Procedure Call Data) | 指一个数据类型,指示函数调用中传递的参数数据,通常用于指示这些参数在内存中的位置和大小 |
ABIInternal | 描述Go运行时的内部实现和ABI的接口 |
寄存器
- PC 寄存器(程序计数器):
作用: 用于存储将要执行的下一条指令的地址。
功能: PC 寄存器的值在程序执行过程中持续增加,指向下一条即将被执行的指令的地址。当发生分支、跳转或函数调用时,PC 寄存器的值会相应地更新。这是控制流程的关键寄存器。 - SP 寄存器(栈指针寄存器):
作用: 用于存储栈的顶部地址。
功能: SP 寄存器的值指示了当前栈帧的顶部,即栈中最新的数据所在的位置。当进行函数调用时,一个新的栈帧被压入栈中,SP 寄存器的值会相应地减小;当函数返回时,栈帧被弹出,SP 寄存器的值会相应地增加。