汇编语言第二章 寄存器

CPU概述
一个典型的CPU由运算器、控制器、寄存器等器件组成,这些器件靠内部总线相连。
区别
内部总线实现CPU内部各个器件之间的联系;
外部总线实现CPU和主板上其他器件的联系。

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

2.1 通用寄存器
8086CPU 所有的寄存器都是16位,可存放两个字节。
通用寄存器:AX BX CX DX
一个16位寄存器所能存储的数据的最大值 2 16 2^{16} 216-1.(即0-15位全部为1)

8086CPU上一代CPU
AX分为 AH AL(high low高低位)
在这里插入图片描述
2.2字在寄存器中的存储
字(word)
1 word =2 Byte

2.3 几条汇编指令
在这里插入图片描述
例:(16位溢出情况)
在这里插入图片描述
例(8位溢出情况 AL与AH 无关,CPU在执行这条指令时认为AL与AH是两个不相关的存储器)
在这里插入图片描述
CPU并不是真的丢弃这个进位值

指令的两个操作对象的位数应当一致
在这里插入图片描述
在这里插入图片描述
(1)
F4A3H
31A3H
3123H
6246H
826CH
6246H
826CH
04D8H
0482H
6C82H
D882H
D888H
D810H
6246H
(2)
mov ax 2
add ax ax
add ax ax
add ax ax

2.4 物理地址

2.5 16位结构的CPU
特性:

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

2.6 8086CPU给出物理地址的方法
8086有20位地址总线,寻址能力为 2 20 2^{20} 220/1024= 2 10 2^{10} 210B,即 1 M。
8086内部为16位结构,它只能传送16位的地址,表现出的寻址能力为 2 6 2^{6} 26K(64K)
如何转换?
地址加法器采用物理地址+段地址*16+偏移地址
二进制移动左移4位,或者说十六进制左移1位即乘以16;

2.8 段的概念
内存并没有分段,段的划分来自于CPU。

在编程时可以根据需要,将地址连续的内存单元看成一个段,用段地址*16定位段的起始地址(基础地址),用偏移地址定位段中的内存单元。
注意两点

在这里插入图片描述
CPU可以用不同的段地址和偏移地址形成同一个物理地址。

2.偏移地址16位,变化范围为:0~FFFFH,则若给定一个段地址,可确定CPU的寻址范围。
21F60H 即段为2000H段的1F60单元中。
“数据存在21F60H内存单元中",这句话对于8086PC机有两种表述:

  1. 数据存在内存2000:1F60单元中
  2. 数据存在内存的2000H段的1F60H单元中
    在这里插入图片描述
    (1)(0010+0)H,(0010+FFFF)H
    即00010H
    1000FH
    (2)1001,2000
    当段地址给定为 1001H 以下和 2000H 以上,CPU无论怎么变化偏移地址都无法寻到20000H单元。
    最大易得,最小时,20000-ffff=10001,将1000代入反过来求,20000不在范围之内。故选1001.

2.9 段寄存器
段寄存器就是提供段地址的。
8086CPU有四个段寄存器:CS、DS、ES、SS
2.10CS和IP
CS和IP是8086CPU最关键的寄存器。它们指示了CPU当前要读取指令的地址。
CS为代码段寄存器,IP为指令指针寄存器。
CS存放指令的段地址,IP存放指令的偏移地址

8086CPU的工作过程:
(1)从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器;
(2)IP=IP+所读取指令的长度,从而指向下一条指令;
(3)执行指令。转到步骤(1),重复这个过程。

2.11 修改CS、IP的指令
mov指令(传送指令)不能用于设置CS、IP的值。
8086CPU为CS、IP提供了另外的指令来改变它们的值,即转移指令。
jmp指令:

  • 同时修改CS、IP的内容,jmp 2AE3:3;,执行后:CS=2AE3H,IP=0003H,CPU将从2AE33处开始读取指令。
  • 仅修改IP的内容,jmp ax,即把ax的值赋给IP。(mov IP,ax,并非真的有此mov语句)

2.12 代码段

我们可以将长度为N(N<=64KB)的一组代码,存在一组地址连续,起始地址为16的倍数的内存单元。

在这里插入图片描述
一个字节8位,两位数即一个字节,故上述共10个字节长度。
我们编程使用代码段,而CPU只认定义代码段的指令。
CPU将CS:IP指向的内存单元中的内容当作指令执行。
在这里插入图片描述
第一次读取 mov ax,bx 后ip+3;
第二次 读取 sub ax,ax 后ip+3;
第三次 读取 jmp ax后ip+2;
第四次 ip=ax;
共四次,ip=0;

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值