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

本文是关于《深入理解计算机系统》第三章的学习笔记,涵盖了程序编码的优化级别选择、机器级编程抽象的ISA概念以及数据格式的细节。在数据格式部分,讨论了GCC生成汇编代码中操作数大小的表示。在访问信息中,介绍了64位CPU的寄存器结构,并详细讲解了操作数指示符,包括立即数、寄存器和存储器的使用。此外,还阐述了数据传送指令,如简单传送和不同类型的扩展传送。
摘要由CSDN通过智能技术生成

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.数据格式

在这里插入图片描述
大多数GCC生成的汇编代码指令都有一个字符后缀,表明操作数的大小。


3.访问信息

64位的CPU包含一组16个存储64位值的通用寄存器。%r8~%r15为64位CPU新加入的寄存器。
在这里插入图片描述

3.1 操作数指示符

立即数(Immediate):常数值
寄存器(Register):表示某个寄存器的内容
存储器(Memory):引用,它会根据计算出来的地址(有效地址)访问某个存储器位置
在这里插入图片描述

3.2 数据传送指令
  1. 简单传送
    在这里插入图片描述
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. 传送符号扩展的字节
    在这里插入图片描述

  2. 传送零扩展的字节
    在这里插入图片描述

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


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值