zoukankan      html  css  js  c++  java
  • 2019-2020-1 20175311胡济栋 《信息安全系统设计基础》第五周学习总结教材学习

    2019-2020-1 20175311胡济栋 《信息安全系统设计基础》第五周学习总结教材学习

    程序结构与执行

    数据格式

    1:指针类型变量的大小只取决于计算机系统的位数,它的大小也等于该计算机系统的int类型大小,即该计算机系统“字”的大小。(这句话中的int其实是上面表格中的long int,因为C语言为了保持跨平台的统一,所以char, short int, int, long long int都采用了固定位数,不随系统位数变化而变化,但是long int类型是根据系统位数决定的!)
    2:在32位系统下,是无法直接操作64位的整数的,所以32位下的long long int的操作是编译器通过一系列位运算完成的。
    3:一个计算机系统的寻址能力由“字”决定,例如:32位系统下的“字”大小为32位(意思就是采用32位大小的整数来表示每个内存地址),所以寻址能力为2的32次方,地址范围为0 ~ 2^32 - 1。

    访问信息

    • 对于机器级编程,两种抽象尤为重要。第一种是指令集架构(ISA),其定义了机器级程序的格式与行为,包括处理器状态、指令格式、指令影响。第二种其使用的内存地址是虚拟地址
    • 程序计数器(PC)给出将要执行的下一条指令在内存中的地址。
    • 不同的操作数按类型被分为三种:第一种类型是立即数,用来表示常数值。(如$-577)第二种类型是寄存器,它表示某个寄存器里的内容。第三种类型是内存引用,它会根据计算出来的地址访问某个内存位置。

    操作数指示符


    上图我们可以看出源数据值可以是常数形式给出,或者是从寄存器或存储器中读出。而结果可以存放在寄存器或存储器中。我们将不同的操作数分为如下三种类型:

      ①、立即数(immediate):书写方式是符号后跟一个标准C表示的整数,比如52,$0x1F等等。任何能放进一个32位的字里面的数值都可以做立即数。

      ②、寄存器(register):它表示某个寄存器的内容,可以是8个32位寄存器中的一个(比如%eax),也可以是8个16位寄存器中的一个(比如%ax),还可以是8个单字节寄存器寄存器(比如%al)。上图是用Ea来表示任意寄存器a,用引用 R[Ea]来表示它的值。

      ③、存储器(memory):它会根据计算出来的地址(通常称为有效地址)来访问某个存储器位置。我们将存储器看成一个很大的字节数组,用符号Mb[Addr] 表示对存储在存储器中从地址 Addr 开始的 b 个字节值的引用。上图省略了下方的 b.

      从上图我们知道,第一行是立即数,第二行则是寄存器,剩下的全部是存储器。其中最后一行存储器语法 Imm(Eb,Ei,s),表示的是最常用的形式,分为四个部分,

      一、Imm 是立即偏移数

      二、Eb 是基址寄存器

      三、Ei 是变址寄存器

      四、s 是比例因子,必须是 1、2、4或8

      然后有效地址计算公式为: Imm + R[Eb]+R[Ei]s。比如对于2(%esp,%eax,4)这个操作数来讲,它代表的是内存地址为2+%esp+4%eax的存储器区域的值。

    代码测试与实践



  • 相关阅读:
    Atitit.软件GUI按钮与仪表盘(01)报警系统
    Atitit.软件仪表盘(7)温度监测子系统电脑重要部件温度与监控and警报
    Atitit.异步编程 java .net php python js 的比较
    Atitit.mssql 数据库表记录数and 表体积大小统计
    Atitit.软件仪表盘(0)软件的子系统体系说明
    Atitit. 单点登录sso 的解决方案 总结
    .atitit.web 推送实现解决方案集合(3)dwr3 Reverse Ajax
    atitit..主流 浏览器 js 引擎 内核 市场份额 attialx总结vOa9
    Atitit.软件仪表盘(4)db数据库子系统监测
    Atitit.软件仪表盘(8)os子系统资源占用监测
  • 原文地址:https://www.cnblogs.com/hujidong42/p/11667903.html
Copyright © 2011-2022 走看看