x86架构下的一些汇编知识

393 阅读1分钟

寄存器

image.png

RIP 指令寄存器,存储PC指针

参数寄存器有6个,分别是%rdi,%rsi,%rdx,%rcx,%r8,%9,超过6个的参数通过栈传递

RSP,RBP 栈顶指针,栈基指针寄存器

在mac的amd64位系统架构下,调用参数传递如下,按照从左至右的顺序写入前6个参数到寄存器,它们分别是%edi,%esi,%edx,%ecx, %r8d, %r9d,超过6个参数的部分按照从右至左的顺序押入栈中

在mac上使用如下代码程序(test.c),可验证一下

int func(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) {
    return 10;
}

int main() {
    func(1,2,3,4,5,6,7,8);
    return 0;
}

执行编译生成汇编代码

clang test.c -S