汇编语言第二章:寄存器 |
您所在的位置:网站首页 › 汇编语言分为两部分 › 汇编语言第二章:寄存器 |
2. 寄存器
寄存器进行信息的存储,对于汇编程序员来说,CPU 中的主要部件是 寄存器。8086 CPU 有 14 个寄存器,这些寄存器分别是: AX BX CX DX SI DI SP BP IP CS SS DS ES PSW 2.1 通用寄存器8086所有的寄存器都是 16 位的,可以存放 两个字节。下面所有的描述都是基于 8086,不再赘述。 通用寄存器通常用来存放一般性的数据。下面是四个通用寄存器: AX、BX、 CX、 DX 16 位寄存器的逻辑结构: 一个 16 位的存储器可以存储一个 16 位的数据,存储的数据范围为( 2 0 2^0 20 ~ 2 16 2^{16} 216- 1 ) 每个寄存器都可以分为两个独立的 8 位寄存器来使用。AX 可以分为 AH 和 AL ax 的 低八位(0 - 7)构成了 al 寄存器,高八位(8 - 15)构成了 ah 寄存器。 字节:byte ,一个字节由 8 个 bit 组成,可以存在 8 位寄存器中。 字:word 一个字由两个字节组成,可以分为高位字节和低位字节。 一个字可以存在一个 16 位寄存器中。 mov ax, 18 //将18送入寄存器ax mov ah, 78 //将78送入寄存器ah add ax,8 //将寄存器ax中的数值加上 8注意:在写一条汇编指令或者一个寄存器的名称时不区分大小写。 在进行数据传送或者运算的时候,要注意指令的两个操作对象的位数应当是一致的。8 位 和 16 位一定不要混用。 // 以下全是错误指令 mov ax,bl mov bh,ax mov al,20000 add al, 100H 2.3 物理地址每一个内存单元在空间中都有一个唯一的地址,这个唯一的地址就是物理地址。 16 位结构的描述了一个 CPU 具有如下结构特性: 运算器一次最多可以处理 16 位数据寄存器的最大宽度是 16 位寄存器和运算器之间的通路为 16 位。8086 CPU 可以一次性传送 20 位地址,寻址能力为 1 MB 采用一种在内部用两个16位地址合成的方法来形成一个 20 位的物理地址。 8086 CPU 提供两个 16 位的地址,一个是 段地址,一个是 偏移地址。 过程: 段地址 + 偏移地址 => 地址加法器 => 输入输出控制电路 => 通过地址总线传送到内存 地址加法器采用 物理地址 = 段地址 * 16 + 偏移地址 的方法合成物理地址。 本质含义:CPU 在访问内存的时候,用一个基础的地址(段地址*16)和一个相对基础地址的偏移地址相加,给出内存单元的物理地址。 更一般的说法 :物理地址 = 基础地址 + 偏移地址 段地址 1230 段地址*16 12300 相加获得物理地址:123C8H 偏移地址 00C8 偏移地址 00C8小技巧:一个 X 进制的数据左移一位,相当于乘以 X 2.4 段寄存器段并不是把内存单元划分成了一个一个的段。其实内存并没有划分成段,段的划分来自 CPU ,用上述的方式来给出内存单元的物理地址,使得我们可以用分段的方式来管理内存。 注意:段地址*16 必然是16的倍数,所以一个段的起始地址一定是16的倍数;偏移地址位16位,16位地址的寻址能力为64KB,所以一个段的长度最大为64KB。 CPU 可以用不同的段地址和偏移地址形成同一个物理地址。 有四个段寄存器: CS、DS、SS、ES 本节我们重点看一下 CS CS 和 IP 指示了 CPU 当前要 读取指令 的地址。CS 为代码段寄存器 IP 为指令指针寄存器。 设 CS 的地址为 M , IP 中的地址为 N ,8086 CPU将从内存 M * 16 + N单元开始,读取一条指令并执行。 Q:CPU 根据什么将内存中的信息看作指令? A:CPU 将 CS : IP 指向的内存单元中的内容看作指令。 2.4.1 修改 CS 、IP 的指令如果想同时修改 CS IP 的指令,需要用 jmp 段地址:偏移地址 上述指令的功能位:用指令中给出的段地址修改CS 偏移地址修改 IP 如果仅想修改 IP 的内容,可用形如 jmp 某一寄存器 的指令完成.。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |