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、控制

  • 相关阅读:
    JS弹出层可拖拽
    DWZ搭建页面快速入门笔记
    JQuery 选择器总结
    最新身份证验证
    centos7磁盘扩容
    vue中使用vueamap(高德地图)
    后台数据格式有问题,更改数据格式
    《JavaScript高级程序设计(第3版)》问题收集
    slice()、substr()、substring()的结果
    【SQL】统计数据过程中利用Union去重
  • 原文地址:https://www.cnblogs.com/yesuuu/p/6938102.html
Copyright © 2011-2022 走看看