资讯详情

【汇编语言02】第2章 寄存器——理论知识

目录

  • 0 前言
  • 1 寄存器
    • 1.1 CPU及寄存器概述
    • 1.2 通用寄存器
    • 1.3 字的存储
  • 2 物理地址及其形成过程
    • 2.1 概述
    • 2.2 16位寄存器和20位地址总线
    • 2.3 理解段
  • 3 段寄存器
    • 3.1 CS和IP寄存器
    • 3.2 CS、IP寄存器修改
    • 3.3 代码段
  • 4 本章汇编指令
    • 4.1 mov指令
    • 4.2 add指令
    • 4.3 jmp指令
  • 5 小结
  • 参考文献

0 前言

  1. 上一章我们了解了汇编语言需要了解的基础知识,包括指令、内存地址、总线等概念。
  2. 本章课程主要了解CPU内部寄存器的工作原理。
  3. 注:为便于复习,本章对内容顺序进行了总结和调整,初学者建议按参考文献的课程顺序和视频顺序学习。

1 寄存器

1.1 CPU以及寄存器概述

  1. 一个典型的CPU由内部总线连接的运算器、控制器、寄存器等设备组成。 (1)运算器:信息处理; (2)寄存器:存储信息; (3)控制器:控制各种工作时间; (4)内部总线:连接各个期间,传输数据。
  2. 内外总线的区别: (1)实现内部总线CPU内部设备之间的连接。 (2)实现外部总线CPU与主板上的其其他设备。
  3. 寄存器:不同的CPU结构不同,寄存器数量不同,寄存器位数也不同。
  4. 本课程以8086CPU介绍代表,这个CPU它们的名字是:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。

1.2 通用寄存器

  1. 通用寄存器:通常用于存储一般数据的寄存器,在8086CPU中主要有AX、BX、CX、DX。
  2. 8086CPU所有寄存器都是16位,可以存储两个字节。

在这里插入图片描述 3. 由于8086上一代CPU这四个通用寄存器可分为两个独立的8位寄存器,以确保兼容性。 (1)AX可以分为AH和AL; (2)BX可以分为BH和BL; (3)CX可以分为CH和CL; (4)DX可以分为DH和DL。

1.3 字的存储

  1. 考虑到兼容性,8086CPU两种尺寸的数据可以一次处理(更高级别)CPU可以处理更长的数据): (1)字节:记为byte,1个字节有8个bit可存在于8位寄存器中的组成。 (2)字:记为word,一个字由两个字节组成,分别称为高位字节和地位字节。 (3)1字 = 2字节; (4)一个寄存器16位,只存一个字;
  2. 理解AX存储和分析寄存器中的字符和字节:
寄存器 寄存器中的数据 所表示的值
AX 0100111000100000 20000(4E20H)
AH 01001110 78(4EH)
AL 00100000 32(20H)

2 物理地址及其形成过程

2.1 概述

  1. 物理地址:CPU访问内存单元时,应给出内存单元的地址。由所有内存单元组成的存储空间为一维线性空间。我们称这个唯一的地址为物理地址。
  2. 作用:CPU一个内存单位的物理地址必须通过地址总线送入存储器。CPU向地址总线发出物理地址之前,必须要在CPU这个物理地址首先在内部形成。
  3. 物理地址的形成方式:不同CPU形成物理地址的方式不同,后续内容为8086CPU为例。

2.2 16位寄存器和20位地址总线

  1. 问题:对于8086CPU,内部寄存器为16位(只能表达16位地址),地址总线宽度为20位。要形成20位物理地址,需要先在内部处理。
  2. 16位结构描述了一个CPU具有以下特点: (1)运算器一次最多可处理16位数据。 (2)寄存器的最大宽度为16位。 (3)寄存器和运算器之间的通道为16位。
  3. 20位地址总线可传输20位地址,寻址能力1M。
  4. 解决方法:在CPU内部有两个16位地址(段地址) 合成方法形成20位物理地址。
  5. 解决过程: (1)CPU相关部件提供两个16位地址,一个叫段地址,另一个叫偏移地址; (2)段地址和偏移地址通过内部总线送入一个称为地址加法器的部件; (3)地址加法器将两个16位地址合并成20位物理地址:。 (4)地址加法器通过内部总线将20个物理地址输入输入输出控制电路; (5)输入输出控制电路将20个物理地址发送到地址总线; (6)地址总线将20个物理地址传输到存储器。

2.3 理解段

  1. 段地址包含了段的概念。事实上,内存并没有分成段,而是表示CPU在程序逻辑上划分一个区域内存的起始地址。
  2. 例:我们可以认为地址是100000H~100FFH内存单元构成一个段,该段的起始地址为1万H,段地址为1000H,大小为100H;我们也可以认为地址1000万H~1007FH、10080H~100FFH内存单位由两个部分组成,其起始地址为1万H和10080H,段地址为1000H和1008H,大小都为80H。
  3. 因为CPU寄存器为16位,限制偏移地址为16位,找到16位地址的能力为64位KB,所以一段的最大长度是64KB。

3 段寄存器

  1. 用途:段寄存器提供段地址。
  2. 8086CPU四段寄存器:CS、DS、SS、ES。当8086CPU这四段寄存器在访问内存时,提供内存单元的段地址。
  3. 本章先学习CS,后续学习的其余部分。

3.1 CS和IP寄存器

  1. CS和IP是8086CPU它们指示了最关键的寄存器CPU当前要读取指令的地址CS:IP。 (1)CS代码段寄存器; (2)IP指令指针寄存器。
  2. CPU何时将二进制解读为数据,何时解读为指令:CPU将CS:IP指向内存单元中的内容视为指令。
  3. 工作原理 (1)8086CPU当前状态:CS中的内容为2000H,IP中的内容为0000H;内存20000H~20009H该单元存储可执行的机器代码,相应的汇编指令如下: (2)从CS:IP指向内存单元读取指令,读取指令进入指令缓冲器; (3)IP=IP 从而执行下一个指令; (4)执行命令,跳转到步骤(2),直至程序结束。
地址 内容 长度 对应汇编指令
20000H~20002H B8 23 01 B mov ax,0123H
20003H~20005H B8 03 00 3B mov bx,0003H
20006H~20007H 89 D8 2B mov ax,bx
20008H~20009H 01 D8 2B add ax,bx

3.2 CS、IP寄存器修改

  1. 无法使用的 mov 指令(传送指令): 对于ax、bx、cx、dx等寄存器,可以使用mov 寄存器,寄存器/值的命令来修改寄存器中的值,但是mov指令不能用于设置CS、IP的值,因为8086CPU没有提供这样的功能,要改变CS、IP内容的指令被统称为转移指令:jmp指令。
  2. 同时修改CS、IP的内容: 使用jmp 段地址:偏移地址命令,可以同时修改CS、IP内容,指令中给出的段地址修改CS,偏移地址修改IP。
jmp 2AE3:3
jmp 3:0B16
  1. 仅修改IP的内容: 使用命令jmp 某一合法寄存器,用寄存器中的值修改IP。
jmp ax   (功能上类似于 mov IP,ax,但8086没有提供mov修改IP的功能)
jmp bx

3.3 代码段

  1. 编程时:可以根据需要,我们将一组内存单位视为一个段,将一组代码存在一组地址连续、起始地址为16倍数的内存单元中,这样,我们可以认为这一段内存是用来存放代码的,从而定义了一个代码段。
  2. 执行时:编程时人为安排的代码段,CPU并不会理解,CPU只会认被CS:IP指向的内存单元中的内容为指令。所以,要让CPU执行我们放在代码段中的指令,必须将CS:IP指向所定义的代码段中第一条指令的首地址。

4 本章汇编指令

4.1 mov指令

  1. 功能:传送指令,用于给某个寄存器或地址赋值。
  2. 格式:mov 寄存器/地址,寄存器/地址/值(待确认其自由组合的可能性)
  3. 例子:
指令 含义 备注
mov ax,18H AX=18H 给16位寄存器AX赋值,所赋的值也是16位,内容为0018H
MOV AX,18H AX=18H 汇编语言对大小写不敏感
mov ax,bx AX=BX 给16位寄存器AX赋值,所赋的值也是16位,是BX对应的内容
mov ah,18H AH=18H 给8位寄存器AH赋值,所赋值也是8位,内容为18H
mov al,18H AL=18H 给8位寄存器AL赋值,所赋值也是8位,内容为18H

4.2 add指令

  1. 功能:用于给某个寄存器加上某个值。
  2. 格式:add 寄存器,寄存器/地址/值(待确认其自由组合的可能性)
  3. 例子:
指令 含义 备注
add ax,18H AX=AX+18H 给16位寄存器AX加上18H,如果结果超出16位,超出部分如何存储暂时不考虑AX只能保存未超出部分的内容,即16位的内容。
add al,18H AL=AL+18H 同理只能保存8位内容,超出部分不会跑到AH中,如何存储暂不考虑。
add ax,bx AX=AX+BX 把BX的内容加到AX中
add ax,ax AX=AX+AX 相当于翻倍

4.3 jmp指令

  1. 功能:用于改变CS、IP的值。
  2. 格式:jmp 段地址:偏移地址jmp 某一合法寄存器
  3. 例子:
指令 含义 备注
jmp 1000:3 CS为1000H,IP为0003H 跳转到地址为10003H的位置
jmp ax IP值修改为ax的内容 是否能jmp 0003H暂未验证

5 小结

  1. 了解CPU中寄存器的概念。8086CPU中有14个寄存器,本章主要掌握4个通用寄存器ax、bx、cx、dx,和两个与指令指向相关的寄存器CS、IP。
  2. 掌握修改寄存器的指令:mov、add、jmp。掌握其命令格式、功能,理解其注意事项比如说计算结果超出寄存器所能存储的位数等。
  3. 理解物理地址作用和形成原理。

参考文献

  1. 《汇编语言(第3版) 》王爽著,主要参考书籍和学习路线。 百度云:https://pan.baidu.com/s/1TE1Egc0ZmeJfLP5zvamo0Q 提取码:3y72
  2. 《汇编语言百科》
  3. 《汇编语言基础06》小甲鱼零基础视频课程
  4. 《汇编语言基础07》小甲鱼零基础视频课程
  5. 《汇编语言基础08》小甲鱼零基础视频课程
  6. 《汇编语言基础09》小甲鱼零基础视频课程
  7. 《汇编语言基础10》小甲鱼零基础视频课程

标签: 0123连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台