汇编语言——第2章 寄存器

目录

引言

2.1 通用寄存器

2.2 字在寄存器中的存储

2.3 几条汇编指令

检测点2.1

2.4 物理地址

2.5 16位结构的CPU

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

2.7  “段地址*16+偏移地址=物理地址”的本质含义

2.8 段的概念

2.9 段寄存器

2.10 CS和IP

2.11 修改CS、IP的指令

2.12 代码段

使用Debug


引言

  • CPU由运算器、控制器、寄存器等器件组成,靠内部总线相连。
  • 内部总线实现CPU内部各器件之间的联系;外部总线实现CPU和主板上其他器件的联系。
  • CPU中:
    • 运算器进行信息处理;
    • 寄存器进行信息存储;
    • 控制器控制各种器件进行工作;
    • 内部总线连接各种器件在它们之间进行数据的传送。

2.1 通用寄存器

8086 CPU所有的寄存器是16位,可以存放2个字节(一个字)

808614个寄存器:

  • AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、CS、ES、PSW。
  • AXBXCXDX通常用来存放一般性数据,被称为通用寄存器。
  • 为保证兼容性,8086 CPU的通用寄存器可以分为两个独立的8位寄存器使用。例: AX可分为AHAL

2.2 字在寄存器中的存储

出于对兼容性的考虑,8086CPU可以一次性处理以下两种尺寸的数据:

  • 字节:记为byte,一个字节由8个bit组成,可以存在8位寄存器中。
  • 字:记为word,一个字由两个字节组成,这两个字节分别称为这个字的高位字节和低位字节。一个字可以存在一个16位寄存器中,这个字的高位字节和低位字节自然就存在这个字的高8位寄存器和低8位寄存器中。
  • 20000写成十六进制4E20就可以直观地看出,这个数据是由4E和20两个8位数据构成的,如果AX中存放4E20,则AH里是4E,AL里是20。

十六进制与二进制:

  • 0100 1110 0010 0000可表示成:4(0100)、E(1110)、2(0010)、0(0000)。
  • 在十六进制表示的数据后面加H,在二进制表示的数据后面加B。

2.3 几条汇编指令

汇编指令对大小写不敏感。

汇编指令举例

汇编指令

控制CPU完成的操作

用高级语言的语法描述

mov ax,18

将8送入AX

AX=18

mov ah,78

将78送入AH

AH=78

add ax,8

将寄存器AX中的数值加上8结果存入AX中

AX=AX+8

mov ax,bx

将寄存器BX中的数据送入寄存器AX

AX=BX

add ax,bx

将AX,BX中的内容相加结果存入AX中

AX=AX+BX

在进行数据传送或运算时,要注意指令的两个操作对象的位数应当是一致的。

检测点2.1

mov ax,2   AX=2

add ax,ax  AX=4

add ax,ax  AX=8

add ax,ax  AX=16

2.4 物理地址

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

2.5 16位结构的CPU

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

对于16位CPU,能一次性处理、传输、暂时存储16位的地址。

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

  • 808620位的地址总线,可以传送20位地址,寻址能力为1M;但8086内部为16位结构,只能传送16位的地址。
  • 8086CPU采用一种在内部用两个16位地址合成的方法来形成一个20位的物理地址。

 

  • 8086CPU读写内存的步骤:
  1. CPU中的相关部件提供段子和偏移地址这两个16位的地址;
  2. 段地址和偏移地址通过内部总线送入到一个称为地址加法器的部件;
  3. 地址加法器将两个16位地址合并成一个20位的地址;
  4. 地址加法器通过内部总线将20位物理地址送送入输入输出地址;
  5. 输入输出控制电路将20位物理地址送上地址总线;
  6. 20位物理地址被地址总线传送到存储器。

地址加法器工作原理:物理地址=段地址*16+偏移地址。

  •  段地址*16就是数据左移4(二进制)

移位位数

二进制

十六进制

十进制

0

10B

2H

2

1

100B

4H

4

2

1000B

8H

8

3

10000B

10H

16

4

100000B

20H

32

​​​​​​​一个数据的二进制形式左移N位,相当于该数据乘以2N次方。

一个数据X进制形式左移N位,相当乘以XN次方。

2.7  “段地址*16+偏移地址=物理地址”的本质含义

​​​​​​​​​​​​​​CPU可以通过不同的段地址和偏移地址形成一个相同的物理地址。

2.8 段的概念

  •  人为定义的,将若干地址连续的内存单元看作一个段。用段地址*16定位段的起始地址(基址),用偏移地址定位段中的内存单元。
  • 一个段的起始地址是16的倍数。偏移地址为16位,寻址能力为64KB,所以段的最大长度也是64KB。
  • 如果给定一个段地址,仅通过变化偏移地址来进行寻址,最多可定位多少个内存单元?
  • 结论:偏移地址16位,变化范围为0~FFFFH,仅用偏移地址来寻址最多可寻64KB个内存单元。比如给定地址1000H,用偏移地址寻址,CPU寻址范围为:10000H~1FFFFH.
  • 在8086PC机中,存储单元的地址用两个元素来描述,即段地址和偏移地址。

2.9 段寄存器

​​​​​​​8086 CPU4个段寄存器:CS(代码段)DS(数据段)SS(堆栈段)ES(附加段),这4个段提供给8086CPU内存单元的段地址。

2.10 CS和IP

  • CS(代码段寄存器) IP(指令指针寄存器) 8086CPU中最关键的寄存器,它们指示了CPU当前要读取指令的地址。
  • 在8086PC机中,任意时刻,设CS中的内容为M,IP中的内容为N,8086CPU将从内存M*16+N单元开始,读取一条指令并执行。
  • 在任意时刻CPUCS:IP指向的内容当作指令执行。
  • 8086CPU工作过程的简要概述:
  1. CS:IP指向内存单元读取指令,读取的指令进入指令缓冲器;

8086PC机刚开始启动时,CPU从内存FFFF0h单元中读取指令执行,FFFF0h单元中的指令时8086PC机开机后执行的第一条指令。

  1. IP=IP+所读取指令的长度,从而正确的指向下一条指令;
  2. 执行指令。转到步骤1,周而复始。

2.11 修改CS、IP的指令

在CPU中,程序员能够用指令读写的部件只有寄存器,程序员可以通过改变寄存器中的内容实现对CPU的控制。CPU从何处执行指令是由CS、IP中的内容决定的,程序员可以通过改变CS、IP中的内容来控制CPU执行目标指令。

  • mov指令(传送指令) 可以改变8086CPU大部分寄存器的值,但不能用于设置CSIP的值
  • jmp指令(转移指令) 可以用来同时修改CSIP的值,格式为
  •     jmp 段地址:偏移地址(同时修改CSIP):用指令中给出的段地址修改CS,偏移地址修改IP。
  •     jmp 某一合法寄存器(仅修改IP):用寄存器中的值修改IP。

2.12 代码段

  • 对于8086PC机,在编程时可以将长度为N(N小于等于64KB)的一组代码存在一组地址连续、起始地址为16的倍数的内存单元中,这段内存是用来存放代码的,从而定义了一个代码段。
  • 利用CS:IP来指向内存单元从而让CPU执行其中的内容。

 

使用Debug

  •  可以使用汇编金手指查阅指令。

    • R命令查看、改变CPU寄存器的内容;
    • D命令查看内存中的内容;
    • E命令改写内存中的内容;
    • U命令将内存中的机器指令翻译成汇编指令;
    • T命令执行一条机器指令;
    • G命令跳转到偏移地址;
    • P命令结束循环或者是int 21H时是退出程序;
    • A命令是以汇编指令的格式在内存中写入一条机器指令。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

关了个尔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值