第2章 访问寄存器和内存

2.1 寄存器及数据存储

在这里插入图片描述

图2-1 8086CPU的寄存器示意图  

在CPU中,“运算器”进行信息处理、“寄存器”进行信息存储、“控制器”协调各种器件进行工作、“内部总线”实现CPU内各个器件之间的联系。8086CPU所有的寄存器都是16位的,可以存放两个字节,8086CPU有14个寄存器(如上图标红):

通用寄存器:AX(AH/AL)、BX(BH/BL)、CX(CH/CL)、DX(DH/D L)
变址寄存器:SI、DI
指针寄存器:SP、BP
指令指针寄存器:IP
段寄存器:CS、SS、DS、ES
标志寄存器:PSW

在这里插入图片描述
而8086上一代CPU中的寄存器都是8位的,为了保证8086与上一代CPU程序兼容,“通用寄存器”均可以分为两个独立的8位寄存器使用。比如下图中,AX可以分为AH、AL:
在这里插入图片描述

图2-2 通用寄存器拆分——AX ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/46572063263a4b4d892fbe8f5b7b8345.png)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意“字长(word size)”=“CPU的寄存器位宽”。因为8086是16位CPU,所以8086的字长为16bit。一个字(word)的高位字节(byte)存在这个寄存器的高8位寄存器、低位字节(byte)存在这个寄存器的低8位寄存器。但实际上,现代的CPU普遍是64位,此时“字长”就是64。

2.2 mov和add指令

在这里插入图片描述

图2-3 mov和add指令——默认十进制

在这里插入图片描述
汇编指令不区分大小写。上图给出了mov和add指令所完成的操作。现在假设 ax、bx 的初始值均为 0000H,那么下面两个程序分别展示了汇编指令程序的执行结果:
在这里插入图片描述
注意最后一步,左侧程序发生了溢出,最高位直接溢出。右侧程序add al,93H会直接舍弃低8位的进位,AX结果为 0058H;只有add ax,93H才会将低8位的进位保存到高8位中,AX结果为 0158H。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

【检测点2.1】

1.写出每条汇编指令执行后相关寄存器中的值。初始值为0000H。
在这里插入图片描述
2.最多使用4条add或mov指令,编程计算2的4次方。

mov ax,0002H # 2
add ax,ax    # 2+2=4
add ax,ax    # 4+4=8
add ax,ax    # 8+8=16

2.3 确定物理地址的方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  CPU访问内存单元时要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性空间,每一个内存单元在这个空间中都有唯一的地址,这个唯一的地址称为物理地址。但实际上,8086有20位地址总线,可传送20位地址,寻址能力为1M。但8086是16位结构的CPU,所以8086CPU使用两个16位地址(段地址、偏移地址)合成一个20位的物理地址:

物理地址=段地址×16+偏移地址
物理地址:20位。
段地址:16位,相当于一个基础地址。“段地址×16”也就是“左移4位”。
偏移地址:16位,也就是一个相对于基础地址的偏移地址。

在这里插入图片描述

图2-4 物理地址的生成方式、地址加法器的工作过程

注意,“段地址”并不是固定的,段地址和物理地址可以任意指定,只要最后的物理地址正确即可。
在这里插入图片描述
在这里插入图片描述

2.4 内存的分段表示法

虽然8086使用分段的方式管理内存,但内存是一个完整空间并没有分段,段的划分来自于CPU!“段地址×16”被称为“段的起始地址”,显然“起始地址”一定是16的倍数;而“偏移地址”为16位,所以一个段的长度最 大为2162^{16}216=64K。同一段内存,多种分段方案,于是同一个物理地址也可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值