zoukankan      html  css  js  c++  java
  • 【CSAPP】三、程序的机器级表示

    本章基于两种相关的机器语言:Intel IA32和x86-64,前者注重32位,后者注重64位。

    本章脉络:c汇编机器码之间的关系,数据的表示,控制结构如何实现。运行栈,局部变量的存储,数据结构。

    【一】程序编码

    -O1表示1级optimize,一般第二级优化比较好。

    1、机器级代码

    两种抽象尤为重要:1、机器级程序的格式和行为 --指令集体系结构。2、储存器地址是虚拟的,字节数组。

    机器级代码可控部分:

    程序计数器(pc, %eip)

    整数寄存器文件:8个命名的位置,分别存储32位的值,可以是数据,也可以是地址。

    条件码寄存器 

    【二】数据格式

    字:16位 w

    双字:32位 dw

    四字:64位 qw

    汇编后缀:b:1, w:2, l:4, 浮点数 s:4, l:8 不会引起歧义,浮点数舒勇不同的指令和寄存器

    【三】访问信息

    1、操作数指示符

    除了立即数和寄存器,都要有寻址的操作。

    立即数$0x108, 寄存器%eax

    寄存器寻址直接加括号(%eax),前面加数就是偏移量,Imm(Ep, Ei, s) 即为 M[Imm + R[Ep] + R[Ei] * s]

    2、数据传送指令

    MOV S, D

    后缀有MOVS MOVZ,分别是符号扩展和零扩展

    PUSH %eax (栈指针是规定好的, %esp)

    3、算术和逻辑操作

    leal S, D 将寄存器S中地址的数加载到寄存器D中

    加一、减一、取负、取补

    加、减、乘、异或、或、与

    左移、算术右移、逻辑右移

    4、控制

  • 相关阅读:
    java并发ThreadLocal
    PermGen space 与 Java heap space
    java vm内存设置
    linux下ssh使用和配置
    ubuntu进入命令登录界面
    7-21 求前缀表达式的值
    7-20 表达式转换
    7-19 求链式线性表的倒数第K项
    7-18 银行业务队列简单模拟
    7-17 汉诺塔的非递归实现
  • 原文地址:https://www.cnblogs.com/yesuuu/p/6938102.html
Copyright © 2011-2022 走看看