CMU15-213农民工学CSAPP

2022-11-13 10:11:10 浏览数 (1)

文章目录

  • Machine-level programming
    • Basic and Control
    • Procedures
    • Procedures
      • stack structure
      • calling conventions
        • passing control
        • passing data
        • managing local data
      • illustration of recursion

Machine-level programming

Basic and Control

Goto is not a bad habit

Procedures

ABI- application binary interface 程序二进制接口 all the parts of a system —manage the machine machine level

Windows has his own ABI and MAC os

传参:get communicate And: it located that should get delocated or should be freed up

Procedures

stack structure

Just a bunch of arrays 管理过程调用与返回状态 后进先出 %rsp—栈顶 在高地址 —每次加东西 往低地址走 倒着来—-头在脚下 pushq dest popq dest store value at dest—-must be register

calling conventions

passing control

call label ret

passing data

神奇的办法,通过地址传递,做到两数相加

movl %esi编译器这样做是因为它可以少移动一个四个字节 leaq 来传递指针

最后栈顶回退16个字节-释放栈空间

ret始终会把栈指针指向的地址作为返回地址

所以%rsp在ret前执行 回到该回到的地方

—-

我们会把那些可能被用到的寄存器存在栈帧里面。在要call别的函数之前。

managing local data

illustration of recursion

一个神奇方法去计算一个数字有多少1: 巧妙利用返回的 rax

成对出现的push pop rbx 是用来保存 弹出rbx临时值的

可以看出 在return里面 先计算两个表达式的值保存在寄存器然后再去call,我们要知道 call完以后他肯定rax保存了返回值

与此同时在call的时候我明白,在call之前rbx设置为右移后的值,当返回时,我们知道rbx存储了x的最低有效位,

所以我们可以把二者相加

最后的返回值rax就是最后的结果

疑问

0 人点赞