汇编语言(b)--存储器

汇编语言(b)–存储器

对于总线的再认识
在CPU与其他器件的连接线称之为外部总线。有外部总线,那么自然就有内部总线,内部总线就是实现CPU内部各个器件之间的联系,CPU中的各个器件指的是运算器、控制器、寄存器等。

  • 运算器进行信息处理
  • 寄存器进行信息存储
  • 控制器控制各种组件进行工作
  • 内部总线连接各种器件,在它们之间进行数据的传送

学习汇编,最重要的是要掌握和理解寄存器,寄存器是CPU中程序员可以用指令读写的部件。不同的CPU,寄存器的个数、结构是不同的。
以下是以8086CPU为例,因此继续进行8086CPU的讲解。8086CPU共有14个寄存器,每个寄存器有一个名称:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW.

通用寄存器

在8086CPU中所有寄存器都是16位的,通用寄存器是上述X结尾的,它的功能是用来存放一般性数据。
另外为了兼容8086CPU之前的CPU编写的程序,因此通用寄存器可以分为两个独立的8位寄存器来使用。而且他们的划分为IH(high)和AL(low)。

字在寄存器中的存储

字节可以存在8位寄存器中,由于字是占两个字节,因此其存在16位寄存器中。
值得注意的是,16进制以H结尾,2进制以B结尾,10进制结尾不加其他成分,另外由于为了表述的方便,在之后的汇编学习中一般使用16进制。

几条汇编指令

这里写图片描述

物理地址

每一个内存单元都有一个唯一的地址,这个地址就叫做物理地址。
不过除了物理地址,难道还有逻辑地址??
一般而言,我们所说的16位结构(或16位机)描述的是CPU的下面几个方面的结构特性:

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

多加几条通路就可以了,为什么不直接使用32位机*是什么因素限制了计算位数的发展?*

8086CPU给出物理地址的方法

由于8086CPU共有20位地址总线,可以传达20位地址,达到1MB寻址能力,但是由于其CPU是16位结构,因此寻址能力只能限制在16位,只有64KB。那么有没有什么办法将寻址能力扩展到20位地址呢?
这就需要进行地址的合成了:
这里写图片描述

物理地址 = 基础地址(段地址*16) + 偏移地址

段的概念

暂时没有清晰的认识与理解

段寄存器

段寄存器就是存放段地址的地方,8086CPU共有4个段寄存器:CS、DS、SS、ES。

CS 和 IP

我们可以理解为:CS就是存放的段地址,而IP存放的是偏移地址。
由于CPU是16位,而地址总线为20位的原因,因此8086CPU中是通过CS:IP来进行访问的。

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

修改CS,IP指令

CS, IP由于都不是通用寄存器,因此其修改不能使用mov,而是使用jmp
例如实例:

jmp 3:01B6
jmp bx

jmp中如果只有一个地址内容或者是数值,那么修改的就是IP中的内容,如果是两个并且中间以冒号隔开,那么就是CS和IP两者都被修改。

实验一:查看CPU和内存,用机器指令和汇编指令编程

  • 用Debug的R命令查看、改变CPU寄存器的内容
  • 用Debug的D命令查看内存中的内容
  • 用Debug的E命令改写内存中的内容
  • 用Debug的U命令将内存中的机器指令翻译成汇编指令
  • 用Debug的T指令执行一条机器指令
  • 用Debug的A命令以汇编指令的格式在内存中写入一条机器指令
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值