csapp
tomjourney
积善之家 必有余庆
展开
-
控制语句(if-else+循环+switch)汇编规则
【1】说说条件码最常用的的条件码有:CF:进位标志 (无符号溢出)ZF:零标志SF:符号标志(结果为负数)OF:溢出标志 (补码溢出, 有符号溢出)【2】有两类指令设置条件码而不改变任何其他寄存器cmp(cmpb, cmpw, cmpl) + test(testb, testw, testl)You should knowif-else + 循环(while + for + do-原创 2015-07-25 23:49:51 · 1789 阅读 · 0 评论 -
程序编码(机器级代码+汇编代码+C代码+反汇编)
【0】写在前面——程序编码GCC调用了一系列程序,将源代码转化成可执行代码的流程如下:(1)C预处理器扩展源代码,插入所有用#include命令指定的文件,并扩展声明的宏;(2)编译器产生两个源代码的汇编代码:*.s;(3)汇编器将汇编代码转化为二进制目标代码 :*.o ; (目标代码是机器代码的一种形式,它包含所有指令的二进制表示,但没有填入地址的全局值)(4)链接器将目标代码与实现库函转载 2015-07-25 22:16:15 · 2910 阅读 · 1 评论 -
过程(栈帧结构是干货)
【0】写在前面过程(栈帧结构是干货);本文总结于csapp, 加上自己的理解;【1】栈帧结构每个函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息。过程调用:函数调用另一个词语表示叫作过程;IA32 程序 用程序栈 来支持过程调用;【2】转移控制(此处非常重要:关系到对函数调用和返回理解是否到位) 解说:显然是地址80483dc的call调用sum函数, call指令转载 2015-07-26 23:19:33 · 1795 阅读 · 0 评论 -
可重定位目标文件
【0】GCC将源代码转化成可执行代码的流程(1)C预处理器cpp扩展源代码,插入所有用#include命令指定的文件,并扩展声明的宏;(2)编译器ccl产生两个源代码的汇编代码:*.s;(3)汇编器as将汇编代码转化为二进制目标代码 :*.o ; (目标代码是机器代码的一种形式,它包含所有指令的二进制表示,但没有填入地址的全局值)(4)链接器ld将目标代码与实现库函数的代码合并,最终产生可原创 2015-08-08 19:41:57 · 1776 阅读 · 0 评论 -
端到端的地址翻译(虚拟地址是怎样取到相应高速缓存的数据的?)
【0】写在前面在虚拟存储器+高速缓存中,CPU取指过程是很复杂的。【1】看个荔枝(以下TLB + 页表 + 高速缓存 是我们手动模拟的): 【2】题目:说有虚拟地址 0x03d7, 虚拟存储器系统如何将其翻译成物理地址和访问缓存的。【3】解答:将以上虚拟地址用二进制表示,如下:我们看到:VPN=bit13~bit6 =0x0f;VPO=bit5~bit0 = 0x17;TLBT(行索引or标原创 2015-08-11 20:17:21 · 1547 阅读 · 0 评论