读书笔记(CSAPP)02

发布时间 2023-04-22 22:29:08作者: Captain_Amazing

gcc -Og -S mstore.c

上述命令行Og意思是优化等级, 指生成符合原始C代码整体结构的机器代码的优化等级, S是产生一个汇编文件, 就可以查看编译器产生的汇编代码

gcc -Og -c mstore.c

上述命令行则是生成".o"的目标代码, 它是二进制的, 是给机器执行的字节序列, 也就是对一系列指令的编码.

Linux系统的反汇编器, 命令行写法: objdump -d mstore.o

3.4 访问信息

  

   

 

 

  生成4字节数字的指令, 会把整数寄存器的高位字节置0, 这是IA31到x86-64扩展的规则

  

 

   上图中小括号的作用: 加了就是内存的值, 不加就是寄存器的值, 可以是指针哦

  数据传送指令: MOV类, 一条限制是两个操作数不能同时为内存位置; 寄存器部分的大小必须与指令最后一个字符匹配

   

  而下面两种指令源操作数可以是寄存器或内存, 目的操作数只能是寄存器, 目的是将较小的源值复制到较大的目的值:

 

   

   

 

   

 

   移位s代表是shift, a代表arithmetic, l, r, 代表左和右, 逻辑为何用h, why?

  

 

   图中印刷错误: 转换为8字应为cqto

 

  

 

   

 

   

 

   

   

   

   

 

   

   

   

 

  要想调试程序, 需要使用编译命令>gcc -Og -g -o prog main.c mstore.c         查到这个g代表为GDB产生符号资讯, 用于调试程序

  记住3.49练习题没看明白

  

 

 

 

 

 上图的双精度异或应是xorpd