iOS安全攻防--(汇编二)

](http://upload-images.jianshu.io/upload_images/4064970-56121c1dce51b871.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

  • 每一个CPU芯片都有许多管脚,这些管脚和总线相连,CPU通过总线跟外部器件进行交互
  • 总线:一根根导线的集合
  • 总线的分类
    • 地址总线
    • 数据总线
    • 控制总线
iOS安全攻防--(汇编二)_第1张图片
2990730-c58c30d262903e7f.png

举个例子

iOS安全攻防--(汇编二)_第2张图片
2990730-bfac743167c4e554.png
  • 地址总线
    • 它决定了CPU的寻址能力
    • 8086的地址总线宽度是20,所以寻址能力是1M(2^20)
  • 数据总线
    • 它决定了CPU单次数据的传送量,也就是数据传输速度
    • 8086的数据总线宽度是16,所以单次传递2个字节
  • 控制总线
    • 它的宽度决定了CPU对其他控件的控制能力、有多少种控制

数据总线

  • 8088的数据总线宽度是8,8086的数据总线的宽度是16,分别向内存中写入89D8H如下图:
    注意:这里是16进制,后方的H是单词Hexadecimal的意思
iOS安全攻防--(汇编二)_第3张图片
8088.png
iOS安全攻防--(汇编二)_第4张图片
8086.png

内存

iOS安全攻防--(汇编二)_第5张图片
各类存储区的逻辑连接
iOS安全攻防--(汇编二)_第6张图片
各类存储器的逻辑连接-物理地址对应图
iOS安全攻防--(汇编二)_第7张图片
各类存储器的物理地址情况
  • 内存地址大小是受CPU地址总线宽度的限制,8086的地址总线宽度为20,可以定位2^20个不同的内存单元(内存地址范围0x00000~0xFFFFF),所以8086的内存空间大小为1MB
  • 0x00000~0x9FFFF:主存储器。可读可写
  • 0xA0000~0xBFFFF:向显存中写入数据,这些数据会被显卡输出到显示器。可读可写
  • 0xC0000~0xFFFFF:存储各种硬件\系统信息。只读

寄存器

内部部件之间 由总线连接
iOS安全攻防--(汇编二)_第8张图片
CPU的典型构成
  • 对于程序员来说,CPU中最主要部件是寄存器,可以通过改变寄存器里面的内容来控制CPU
  • 不同的CPU,寄存器的个数、结构是不相同的
  • 8086有14个寄存器
    • 都是16位的寄存器
    • 可以放两个字节
iOS安全攻防--(汇编二)_第9张图片
8086内部寄存器

通用寄存器

  • AX、BX、CX、DX这4个寄存器通常用来存放一般性的数据,称为通用寄存器(有时也有特定用途)
  • 通常,CPU会先将内存中的数据存储到通用寄存器中,然后再对通用寄存器中的数据进行运算
  • 假设内存中有块红色内存空间的值是3,现在想把它的值加1,并将结果存储到蓝色内存空间
iOS安全攻防--(汇编二)_第10张图片
001
  • CPU首先会将红色内存空间的值放到AX寄存器中:mov ax,红色内存空间
  • 然后让AX寄存器与1相加:add ax,1
  • 最后将值赋值给内存空间:mov 蓝色内存空间,ax
  • AX、BX、CX、DX这4个通用寄存器都是16位的,如下图所示
image.png
  • 上一代8086的寄存器都是8位的,为了保证兼容, AX、BX、CX、DX都可分为2个独立的8位寄存器来使用
    • H代表高位寄存器
    • L代表低位寄存器
字和字节
  • 在汇编的数据存储中,有2个比较常用的单位
    • 字节:byte,1个字节由8bit组成,可以存储在8位寄存器中
    • 字:word,1个字由2个字节组成,这2个字节分别称为字的高字节和低字节
  • 比如数据20000(4E20H,0100111000100000B),高字节的值是78,低字节的值是32
  • 1个字可以存在1个16位寄存器中,这个字的高字节、低字节分别存储在这个寄存器的高8位寄存器、低8位寄存器中

你可能感兴趣的:(iOS安全攻防--(汇编二))