汇编语言第2章 寄存器

Posted 鱼竿钓鱼干

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编语言第2章 寄存器相关的知识,希望对你有一定的参考价值。

推荐文章:【汇编语言 王爽第三版】学习笔记目录+习题解析+实验

【汇编语言】第2章 寄存器

本文分为4个部分:

  1. 书本知识点概览
  2. 书本自带的小结
  3. 书本习题解析
  4. 个人小结

知识点概览

CPU由运算器、控制器、寄存器构成,由总线相连。
运算器:信息处理
寄存器:信息处处
控制器:控制各种器件进行工作
总线:数据传输

8086CPU有14个寄存器,且都是16位:
AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS,ES,PSW

2.1 通用寄存器

AX,BX,CX,DX用来存放一般性数据,被称为通用寄存器,每个都可以分为两个独立的8位寄存器,分别对应高位和低位
在这里插入图片描述

2.2 字在寄存器中的存储

8086CPU可以一次性处理两种尺寸数据
字节:byte
字:word,一个字有两个字节组成,分别为高位字节和低位字节

2.3 几条汇编指令

在这里插入图片描述
其实mov可以想成赋值运算,add可以当作+=
寄存器不区分大小写ax和AX一样

问题2.1
ax= 8226 H,bx= 8226 H,执行add ax,bx后ax结果如何
算出来应该时 1044C H,但是ax时16位寄存器,存不下所以去掉最高位的1,ax= 044C H

问题2.2
ax=00C5 H,执行add al,93 H后ax结果如何
al=C5 H,执行命令后 al=158 H,但是al是8位寄存器,只能放2位16进制,al=58 H,ax=0058 H
这说明ah和al是独立的,al的进入并不会存到ah当中
但是如果执行add ax,93 H,你们结果就是ax=0158H

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

2.4 物理地址

每个内存单元在线性的存储空间中都有一个唯一的地址,这个唯一的地址称为物理地址。

2.5 16位结构的CPU

运算器一次最多可以处理16位数据(处理)
寄存器的最大宽度位16位(暂存)
寄存器和运算器之间的通路16位(传输)

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

两个16为地址合成一个20为物理地址
在这里插入图片描述
地址加法器:物理地址=段地址*16+偏移地址
或者说将段地址左移4位

2.7 段地址x16+偏移地址=物理地址的本质含义

更一般的说,8086CPU的寻址功能是基础地址+偏移地址=物理地址寻址模式的具体实现
用比较限制的设备实现更强的寻址能力,8060是16位结构却发挥出了20位的寻址能力

2.8 段的概念

段地址并不是说内存是分段的,段的划分来自CPU。划分段方便CPU管理内存。
段地址x16+偏移地址=物理地址的本质含义是基础地址+偏移地址=物理地址。CPU把一段连续的内存单元当成一段,这样就得到了一个个段,定位段的起始地址就是基础地址,然后我们可以通过偏移地址确定一个段内的某个内存单元

段地址x16必然是16的倍数,所以一个段的其实地址也一定是16的倍数
偏移地址16位,16位地址寻址能力64KB,所以一个段的最大长度位64KB

2.9 段寄存器

段寄存器提供段地址,8086CPU有4个段寄存器CS,DS,SS,ES。

2.10 CS和IP

CS为代码段寄存器,IP为指令指针寄存器

8086PC机任意时刻,CS中内容为M,IP中内容为N,8086CPU从内存M*16+N单元开始读取一条指令并执行(8086机中,任意时刻,CPU将CS:IP指向的内容当作指令执行)

8086CPU家电启动或复位后,CS=FFFF H,IP=0000 H

8086CPU的工作过程

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

2.11 修改CS、IP的指令

mov指令不能用于设置CS、IP的值,我们可以用jmp指令来修改

jmp 段地址:偏移地址 的功能为:用指令中给出的段地址修改CS,偏移地址修改IP

jump 某一合法寄存器 的功能为:用寄存器中的值修改IP

问题2.3
在这里插入图片描述

2.12 代码段

编程时可以根据需要把一度代码定义为一个段。我们可以将长度为N(N<=64KB)的代码存在一组地址连续,起始地址为16倍数的内存单元中,把这段内存当作代码段

书本小结

在这里插入图片描述

在这里插入图片描述

习题解析

在这里插入图片描述
答案:

指令结果
mov ax,62627AX=F4A3H
mov ah,31HAX=31A3H
mov al,23HAX=3123H
add ax,axAX=6246H
mov bx,826CHBX=826CH
mov cx,axCX=6246H
mov ax,bxAX=826CH
add ax,bxAX=04D8H
mov al,bhAX=0482H
mov ah,blAX=6C82H
add ah,ahAX=D882H
add al,6AX=D888H
add al,alAX=D810H
mov ax,cxAX=6246H

在这里插入图片描述
答案:
(1)0010H 到001F H
段地址16+偏移地址
(2)1001H,2000H
20000H=段地址
16+偏移地址
偏移地址范围0 H到FFFF H
在这里插入图片描述
答案:四次,IP=0000 H
第一次,读取mov ax,bx
第二次, 读取sub ax,ax
第三次, 读取jmp ax
第四次, 执行jmp ax

个人总结

  1. mov当成赋值add当成+=
  2. 寄存器
寄存器功能、特点
AX,BX,CX,DX存一般数据
CS,DS,SS,ES存段地址
IP存指令地址

3.物理地址=基础地址+偏移地址
4.使用jmp修改CS:IP

以上是关于汇编语言第2章 寄存器的主要内容,如果未能解决你的问题,请参考以下文章

汇编语言程序设计 第2章概念梳理

汇编语言第2章 寄存器

汇编语言第3章 寄存器(内存访问)

汇编语言第五章总结

汇编语言第一章总结

汇编语言程序设计实验报告三