1.11 ~ 2.6

2020-03-03
2020-03-03
4 min read
Hits

  《汇编语言(第3版)》1.11 ~ 2.6、《零基础入门学习汇编语言》P5 ~ 8

1.11 内存地址空间(概述)

  一个 CPU 的地址线宽度为 10,那么可以寻址 1024 个内存单元,这 1024 个可寻到的内存单元就构成这个 CPU 的内存地址空间。

1.13 接口卡

  CPU 对外部设备不能直接控制,如显示器、音箱、打印机等。直接控制这些设备进行工作的是插在扩展插槽上的接口卡。

1.14 各类存储器芯片

  1. 从读写属性上分两类
    1. 随机存储器(RAM)
    2. 只读存储器(ROM)
  2. 从功能和连接上分类
    1. 随机存储器 RAM
    2. 装有 BIOS 的 ROM
    3. 接口卡上的 RAM

1.15 内存地址空间

  最终运行程序的是 CPU,我们用汇编编程的时候,必须要从 CPU 角度考虑问题(学习汇编的核心思维)。

第二章 寄存器(CPU工作原理)

  一个典型的 CPU 由运算器、控制器、寄存器等器件组成,这些器件靠内部总线相连。

  8086 CPU 有 14 个寄存器,它们的名称为:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PWS。

2.1 通用寄存器

  8086 CPU 所有的寄存器都是 16 位的,可以存放两个字节。

  AX、BX、CX、DX 通常用来存放一般性数据被称为通用寄存器。

  一个 16 位寄存器所能存储的数据的最大值为 $ 2^{16}-1 $

  8086 上一代 CPU 中的寄存器都是 8 位的,所以为保证兼容性,这四个寄存器都可以分为两个独立的 8 位寄存器使用:AX 可以分为 AH 和 AL;BX 可以分为 BH 和 BL,以此类推。

2.2 字在寄存器中的存储

  一个字可以存在一个 16 位寄存器中,这个字的高位字节和低位字节自然就存在这个寄存器的高 8 位寄存器和低 8 位寄存器中。

2.3 几条汇编指令

汇编指令不区分大小写

汇编指令控制 CPU 完成的操作用高级语言的语法描述
mov ax,18将 18 送入 AXAH = 18
mov ah,78将 78 送入 AHAH = 78
add ax,8将寄存器 AX 中的数值加上 8AX = AX + 8
mov ax,bx将寄存器 BX 中的数据送入寄存器 AXAX = BX
add ax,bx将 AX,BX 中的内容相加,结果存在 AX 中AX = AX + BX

  CPU 执行下表中的程序段的每条指令后,对寄存器中的数据进行的改变。

问1:原 AX 中的值:0000H,原 BX 中的值:0000H)

程序段中的指令指令执行后 AX 中的数据指令执行后 BX 中的数据
mov ax,4E20H4E20H0000H
add ax,1406H6226H0000H
mov bx,2000H6226H2000H
add ax,bx8226H2000H
mov bx,ax8226H8226H
add ax,bx?8226H

  答案:044CH(原本 8226H+8226H=1044CH,但是 ax 只放得下两个字所以是 044CH)

问2:原 AX 中的值:0040H

程序段中的指令指令执行后 AX 中的数据
add al,85H00C5H
add al,93H?

  答案:0058H(因为 add 的地方是 al 八位寄存器,所以原本属于 ax 高位 ah 的 01 进位值会被丢失。这里的丢失,指的是进位值不能在 8 位寄存器中保存,但是 CPU 并不是真的丢弃这个进位值)

2.4 物理地址

  CPU 访问内存单元时要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性空间,这个唯一的地址称为物理地址。

2.5 16 位结构的 CPU

  概括的讲,16 位结构描述了一个 CPU 具有以下几个方面特征

  1. 运算器一次最多可以处理 16 位的数据。
  2. 寄存器的最大宽度为 16 位。
  3. 寄存器和运算器之间的通路是 16 位的。

2.6 8086 CPU 给出物理地址的方法

  8086 有 20 位地址总线,可传送 20 位地址,寻址能力为 1M( $ 2^{20}=1MB $ )

  8086 内部为 16 位结构,它只能传送 16 位的地址,表现出的寻址能力就只有64K( $ 2^{16}=64KB $ )

  8086 CPU 采用一种在内部用两个 16 位地址合成的方法来形成一个 20 位的物理地址

  地址加法器合成物理地址的方法:物理地址 = 段地址 × 16 + 偏移地址

  “段地址 × 16”有一个更为常用的说法就是数据左移 4 位(二进制位)。

移位位数二进制十六进制十进制
010B2H2
1100B4H4
21000B8H8
310000B10H16
4100000B20H32
  1. 通过观察上表(移位次数和各种形式数据的关系)得出
    1. 一个数据的二进制形式左移 1 位,相当于该数据乘以 2;
    2. 一个数据的二进制形式左移 N 位,相当于该数据乘以 $ 2^N $
    3. 地址加法器完成段地址 × 16 的运算即以二进制形式存放的段地址左移 4 位。
  2. 进一步思考可得
    1. 一个数据的十六进制形式左移 1 位,相当于乘以 16;
    2. 一个数据的十进制形式左移 1 位,相当于乘以 10;
    3. 一个数据的 X 进制形式左移 1 位,相当于乘以 X。
Avatar

Hui.Ke

❤ Cyber Security | Safety is a priority.
Previous 2.8 ~ 2.12