C调用栈帧

1.函数堆栈

    阅读调用栈帧以及有关编译器优化inline函数的知识以后,觉得有必要总结一下基础认识。方便以后阅读有关c调用规范

1.1寄存器的基本概念

    cpu寄存器用来暂时存放参与运算的数据和运算结果。原理就是一种常用的时序逻辑电路,寄存器的存储电路是由锁存器或触发器构成的,因为一个锁存器或触发器能存储1位二进制数,所以由N个锁存器或触发器可以构成N位寄存器

  1. 数据寄存器
    数据寄存器是用来存放运算操作数和运算结果的寄存器,用来减少读取操作数时占用总线和访问存储器的时间,64、32、16位数据寄存器分别对应为R(A-D)X,E(A-D)X,(A-D)X。

  2. 变址寄存器
    变址寄存器是用来存放存储单元在段内的偏移量的,主要用于串操作指令当中,方便多种存储器操作数的寻址,为不同的地址形式访问存储单元提供方便。以MOVS指令(串传送)的功能作为简要介绍其中(R\E)SI、DI的使用方法:
        MOVS指令:(Es:DI) <—(Ds:SI),是将数据段中由SI间接寻址的一个字节(或者一个字)传送到附加段中由DI间接寻址的一个字节单元(一个字)中去,然后根据DF及所传送数据类型对SI及DI进行修改。在重复前缀REP的控制下,可将数据段中的整串数据拷贝到附加段中。

  3. 指令寄存器
    指令指针寄存器是存放下次将要执行的指令在代码段的偏移量。在具备有预取指令功能的系统中,下次要执行的指令通常已被预取到指令队列中,除非发生转移情况。指令寄存器为RIP、EIP、IP。

2.cached 和Uncached的理解

参考博文:
https://blog.csdn.net/linuxandroidwince/article/details/7638318
https://blog.csdn.net/hellojoy/article/details/80760010

2.1 缓存的写回方式

    Write-through- Write is done synchronously both to the cache and to the backing store.

      Write_through cached

    Write-back (or Write-behind) - Writing is done only to the cache. A modified cache block is written back to the store, just before it is replaced.

      Write_back cached

cached地址和uncached是针对CPU访问区域而言的,cached地址的访问是委托给CPU进行的,也就是说你的操作到底是提交给真正的外设或内存,还是转到CPU缓存,是由CPU决定的。对IO设备的读写是不涉及到cache缓存区域的,因为CPU是无法知道直接读取IO设备的当前状态,只有在读写内存区域的时候才会用到cache区域,即内存区域的数据是cpu来直接改的,内存区域的数据是cpu通过缓存策略来进行同步或者读写。

发布了38 篇原创文章 · 获赞 5 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/zhiyanzhai563/article/details/84110453