汇编语言第2章 寄存器
Posted 鱼竿钓鱼干
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编语言第2章 寄存器相关的知识,希望对你有一定的参考价值。
推荐文章:【汇编语言 王爽第三版】学习笔记目录+习题解析+实验
【汇编语言】第2章 寄存器
本文分为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的工作过程
- 从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器
- IP=IP+所读指令长度,从而指向下一条指令
- 指向指令。转到步骤(1),重复这个过程
2.11 修改CS、IP的指令
mov指令不能用于设置CS、IP的值,我们可以用jmp指令来修改
jmp 段地址:偏移地址 的功能为:用指令中给出的段地址修改CS,偏移地址修改IP
jump 某一合法寄存器 的功能为:用寄存器中的值修改IP
问题2.3
2.12 代码段
编程时可以根据需要把一度代码定义为一个段。我们可以将长度为N(N<=64KB)的代码存在一组地址连续,起始地址为16倍数的内存单元中,把这段内存当作代码段
书本小结
习题解析
答案:
指令 | 结果 |
---|---|
mov ax,62627 | AX=F4A3H |
mov ah,31H | AX=31A3H |
mov al,23H | AX=3123H |
add ax,ax | AX=6246H |
mov bx,826CH | BX=826CH |
mov cx,ax | CX=6246H |
mov ax,bx | AX=826CH |
add ax,bx | AX=04D8H |
mov al,bh | AX=0482H |
mov ah,bl | AX=6C82H |
add ah,ah | AX=D882H |
add al,6 | AX=D888H |
add al,al | AX=D810H |
mov ax,cx | AX=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
个人总结
- mov当成赋值add当成+=
- 寄存器
寄存器 | 功能、特点 |
---|---|
AX,BX,CX,DX | 存一般数据 |
CS,DS,SS,ES | 存段地址 |
IP | 存指令地址 |
3.物理地址=基础地址+偏移地址
4.使用jmp修改CS:IP
以上是关于汇编语言第2章 寄存器的主要内容,如果未能解决你的问题,请参考以下文章