六星经典CSAPP-笔记(3)程序的机器级表示
- Intel格式忽略指令中暗示操作数长度的后缀,例如mov而不是ATT格式的movl。
- Intel格式忽略寄存器名称前的%,例如esp而不是ATT格式的%esp。
- Intel格式用不同的方式描述内存位置,例如DWORD PTR [ebp+8]而不是ATT格式的8(%ebp)。
- Intel格式指令的操作数顺序与ATT格式的完全相反,ATT格式总是最后一个操作数是目标,例如movl %eax, (%edx)。
- mov:数据移动。IA32强加了一条限制:一条移动指令的两个操作数不能都是内存地址。所以从一个内存位置拷贝数据到另一个内存位置是需要两条指令的。
- leal:加载地址。效果就是mov Imm(%a, %b, s), %x会将%x赋值为Imm+%a+s*%b,而不是M[Imm+%a+s*%b],所以有两个很有用的场景:1)拷贝地址。例如int *x=a汇编为mov (%eax), %edx,那么int x=&a汇编为leal (%eax), %edx。所以leal不会真的将a的值(即(%eax))保存到x(即%edx),而只是将a的地址(其实就是%eax)保存到x。2)简单算术运算。第二个很自然会想到的应用就是使用leal一条指令压缩简单的算术运算,例如leal 7(%edx, %edx, 4)=5x+7。
- jmp:直接跳转到标签,或间接跳转到寄存器中指定的地址。对于直接跳转,在汇编语言中通常就是符号化的标签表示。但之后汇编器或链接器要对其进行编码,最常见的编码方式就是PC相对地址。即用1、2、4字节的偏移量表示跳转目标地址与jmp指令紧接着的下一条指令的地址,如下图所示。但为什么是紧接着jmp指令的下一条指令的地址而不是jmp这一条的?其实也是有历史原因的,因为早期的处理器实现是先更新PC计数器作为第一步,然后再执行当前指令的。所以指令在执行的时候,其实PC已经指向下一条指令了,因此跳转的偏移量也就要相对下一条指令来说了。
- 扩展:无符号进行零扩展,即用零填充高位。有符号进行符号扩展,即用最高位-符号位填充高位。
- 截断:简单地扔掉高位字节。对于小尾端来说,就是反过来,拷贝寄存器的高位如%al。
- 当没有足够的寄存器来保存所有局部变量时。毕竟寄存器只有八个。
- 一些局部变量是数组或struct,因此必须通过指针访问。
- 当对局部变量进行取地址&运算时,因此必须产生一个内存地址给它。
六星经典CSAPP-笔记(3)程序的机器级表示的更多相关文章
- 六星经典CSAPP笔记系列 - 作者:西代零零发
六星经典CSAPP笔记(1)计算机系统巡游 六星经典CSAPP笔记(2)信息的操作和表示 六星经典CSAPP-笔记(3)程序的机器级表示
- 六星经典CSAPP笔记(1)计算机系统巡游
CSAPP即<Computer System: A Programmer Perspective>的简称,中文名为<深入理解计算机系统>.相信很多程序员都拜读过,之前买的旧版没 ...
- 六星经典CSAPP笔记(2)信息的操作和表示
2.Representing and Manipulating Information 本章从二进制.字长.字节序,一直讲到布尔代数.位运算,最后无符号.有符号整数.浮点数的表示和运算.诚然有些地方的 ...
- 六星经典CSAPP-笔记(7)加载与链接(上)
六星经典CSAPP-笔记(7)加载与链接 1.对象文件(Object File) 1.1 文件类型 对象文件有三种形式: 可重定位对象文件(Relocatable object file):包含二进制 ...
- 六星经典CSAPP-笔记(11)网络编程
六星经典CSAPP-笔记(11)网络编程 参照<深入理解计算机系统>简单学习了下Unix/Linux的网络编程基础知识,进一步深入学习Linux网络编程和TCP/IP协议还得参考Steve ...
- 六星经典CSAPP-笔记(12)并发编程(上)
六星经典CSAPP-笔记(12)并发编程(上) 1.并发(Concurrency) 我们经常在不知不觉间就说到或使用并发,但从未深入思考并发.我们经常能"遇见"并发,因为并发不仅仅 ...
- 六星经典CSAPP-笔记(10)系统IO
六星经典CSAPP-笔记(10)系统I/O 1.Unix I/O 所有语言的运行时系统都提供了高抽象层次的I/O操作函数.例如,ANSI C在标准I/O库中提供了诸如printf和scanf等I/O缓 ...
- CSAPP:第三章程序的机器级表示2
CSAPP:程序的机器级表示2 关键点:算术.逻辑操作 算术逻辑操作1.加载有效地址2.一元二元操作3.移位操作 算术逻辑操作 如图列出了x86-64的一些整数和逻辑操作,大多数操作分成了指令类( ...
- CSAPP:第三章程序的机器级表示1
CSAPP:程序的机器级表示1 关键点:数据格式.操作数指示符. 数据格式访问信息操作数指示符举例说明 数据格式 术语字(word)表示16位数据类型,32位数为双字(double words), ...
随机推荐
- [LeetCode] Max Consecutive Ones II 最大连续1的个数之二
Given a binary array, find the maximum number of consecutive 1s in this array if you can flip at mos ...
- codeforces 809E Surprise me!
Tired of boring dates, Leha and Noora decided to play a game. Leha found a tree with n vertices numb ...
- Trie模版
struct Trie{ Trie* nxt[]; int v; Trie(){ ;i<;i++){ nxt[i]=NULL; } v=-; } void insert(char s[],int ...
- 计蒜客NOIP2017提高组模拟赛(三)day2-直线的交点
传送门 简单几何+逆序对 发现当两条直线甲乙与平板的交点在上面甲在较左的位置,那么下面甲在较右的位置就可以相交 然后把上面的位置排下序,下面离散化+树状数组即可 #include<cstdio& ...
- C++Primer学习——const
Const int size = 512; 在编译的时候,编译器会把用到该变量的地方全部替换成对应的值. const&可以绑定字面值,所以当用常量引用绑定一个常量时,是否可以看成那个值在编译阶 ...
- poj 1367 robot(搜索)
题意:给你一个图,求起点 到 终点的最少时间 每次有两种选择①:往前走1~3步 ②原地选择90° 费时皆是1s 图中1为障碍物,而且不能出边界.还要考虑机器人的直径 ...
- lombok安装与简易教程(一)
lombok简单的来讲就是在编译的时候,可以帮助我们生成getter与setter等方法,减少代码量.这可是一个好东西啊 1.eclipse安装lombok java -jar lombok.jar ...
- 使用jquery.qrcode.js生成二维码
通常生成二维码的方式有两种:第一种是java代码的形式,第二种是通过Js方式. 在这里我做个记录,用js生成二维码,可以在官网下载源码:http://jeromeetienne.github.io/j ...
- day4 liaoxuefeng---高级特性
掌握了Python的数据类型.语句和函数,基本上就可以编写出很多有用的程序了. 但是在Python中,代码不是越多越好,而是越少越好.代码不是越复杂越好,而是越简单越好. 基于这一思想,我们来介绍Py ...
- P2P技术详解(二):P2P中的NAT穿越(打洞)方案详解
1.内容概述 P2P即点对点通信,或称为对等联网,与传统的服务器客户端模式(如下图"P2P结构模型"所示)有着明显的区别,在即时通讯方案中应用广泛(比如IM应用中的实时音视频通信. ...