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
标签:02,CSAPP,mstore,读书笔记,Og,gcc,指令,寄存器,操作数 From: https://www.cnblogs.com/captionAmazing/p/17276884.html