深入理解计算机系统(CSAPP) 第三章学习笔记

1.程序编码

unix> gcc -o1 -s p1.c                  //生成汇编文件p1.c,但不做其他进一步的工作

unix> gcc -o1 -c p1.c                  //生成目标代码文件 p1.o

unix> gcc -o1 -o p p1.c p2.c           //生成可执行代码文件p,其中不仅包含两个
									   //过程的代码,还包含了用来启动和终止程序的
									   //信息,以及用来与操作系统交互的信息
									   
unix> objdump -d p1.o                  //通过反汇编器(disassembler)根据.o文件生成一种
									   //类似汇编代码的格式。反汇编器只基于机器代码文件
									   //中的字节序列来确定汇编代码,不需要访问程序的源码

编译选项-o1告诉编译器使用第一级优化。提高优化级别会使最终程序运行得更快,但是编译时间可能会更长,用调试工具对代码进行调试会更加困难。从得到的程序性能方面考虑,第二级优化-o2被认为是最好的选择

机器级编程抽象:1)机器级程序的格式和行为,定义为指令集体结构(Instruction Set Architecture,ISA) 2)机器级程序使用的存储器地址是虚拟地址


2.数据格式

深入理解计算机系统(CSAPP) 第三章学习笔记_第1张图片
大多数GCC生成的汇编代码指令都有一个字符后缀,表明操作数的大小。


3.访问信息

64位的CPU包含一组16个存储64位值的通用寄存器。%r8~%r15为64位CPU新加入的寄存器。
深入理解计算机系统(CSAPP) 第三章学习笔记_第2张图片

3.1 操作数指示符

立即数(Immediate):常数值
寄存器(Register):表示某个寄存器的内容
存储器(Memory):引用,它会根据计算出来的地址(有效地址)访问某个存储器位置
深入理解计算机系统(CSAPP) 第三章学习笔记_第3张图片

3.2 数据传送指令

  1. 简单传送
    深入理解计算机系统(CSAPP) 第三章学习笔记_第4张图片
movl $0x4050,%eax                   //Immediate--Register, 4 bytes
movw %bp,%sp                        //Register--Register, 2 bytes
movb (%rdi,%rcx),%al                //Memory--Register, 1 byte
movb $-17,(%esp)                    //Immediate--Memory, 1 byte
movq %rax,-12(%rbp)                 //Register--Memory, 8 bytes
  1. 传送符号扩展的字节
    深入理解计算机系统(CSAPP) 第三章学习笔记_第5张图片

  2. 传送零扩展的字节
    深入理解计算机系统(CSAPP) 第三章学习笔记_第6张图片

movz和movs指令类都是将一个较小的源数据复制到一个较大的数据位置,高位用符号位扩展或者零扩展进行填充


2019.03.26创建:1节
2019.04.09更新:2-3节

你可能感兴趣的:(操作系统)