汇编原理文档
概念/概述
系统总线:控制,数据,地址
控制总线
主要性能指标:16位机器
双字,字节
三态电路
当选通端E为高电平时,A的两种可能的电平(0和1)都可以顺利的通到B端去,即E=1时,B=A。
当选通端E为低电平时,A端与B端是不相通的,即它们之间存在着高阻状态
电子计算机分类
计算机按用途
- 专用计算机和通用计算机
按计算机的使用方式分类
嵌入式计算机
桌面计算机
服务器
按计算机的结构分类
冯•诺依曼结构(以运算器为中心的)
非冯•诺依曼结构
按规模分
- 超级计算机、大型机、服务器、微型机、单片机
冯•诺依曼结构:
①计算机(指硬件)由运算器、存储器、控制器、输入设备和输出设备五大基本部件组成。
②指令和数据均以二进制编码表示,采用二进制运算。
③采用存储程序的方式, 程序和数据存放在同一存储器中。
④指令在存储器中按其执行顺序存放,由程序计数器指明要执行的指令地址,自动从存储器中取出指令并执行。
⑤计算机是以运算器为中心的,输入/输出设备与存储器之间的数据传送都要通过运算器。
现代微型计算机系统
①以存储器为中心的计算机系统
- 提高了批量数据交换效率
②总线
连接CPU与I/O,提供外设访问内存和CPU资源的通道
数据总线(DB): 传送程序或数据
地址总线(AB): 传送内存地址
控制总线(CB): 传送各种控制信息
③I/O接口
又称适配器,存在于CPU与外设之间,是CPU与外围设备进行信息交换的中转站。外围设备通过I/O接口连接在系统总线上。它保证外围设备采用计算机系统所要求的形式发送和接收信息。
通用可编程接口:可以通过对接口芯片编程,使得同一接口芯片适应多种使用场合。
④三级存储结构
ROM(存储BIOS)、RAM、Cache总称为内存
主要性能指标
位(bit):计算机内部数据存储的最小单位。
字节(Byte):最基本的存储单元,也是计算机中数据处理的基本单位。
字(word):计算机进行数据处理时,一次存取、加工和传送的数据长度。
8086一个字由两个字节组成,字长为16位,称为16位机
内存:内存容量以字节为单位计算,用B,KB,MB,GB
运算速度:
最短指令法:以执行时间最短的指令或某条特定指令为标准来计算速度,如传送指令、加法指令等。
平均速度:根据不同类型指令在计算过程中出现的频率,乘以不同的系数,求得统计平均值。
一般只给出时钟频率指标,不给出运算速度指标
时钟频率
主频:指微处理器在单位时间(秒)内发出的时钟脉冲数,时钟频率越高,运算速度越快
微型计算机系统基础
指令系统
程序:是一组指令的有序集合。
指令系统:一台CPU能识别的所有指令的集合。
指令集体系结构(Instruction Set Architecture,ISA)/指令系统
CPU物理层与上层软件的接口
CPU的设计目标是使硬件能够识别和执行ISA要求的指令
编译程序任务将程序编译成ISA所包含的指令
系列计算机:具有相同的基本指令系统和基本体系结构,但具有不同组成和实现的一系列不同型号的机器。
x86系列
IBM-360
曙光,神威,银河
CPU指令集:CISC(复杂,Intel,AMD),RISC(精简,IBM,ARM,MIPS)
输入输出系统
中断方式
中断源
- 内部中断源:计算溢出,指令的单步运行,执行特定的中断指令
- 外部中断源:外设输入输出请求,定时时间到,电源掉电
中断处理过程:
- 中断请求
- 中断响应:保护断点(下一条指令地址),保护现场(寄存器),识别中断源(中断处理程序所在的内存地址)
- 中断处理
- 中断返回:恢复现场,恢复断点
主要寄存器熟练!
中断过程
中断处理
中断向量表
8086微处理器
地址线
寻址空间
奇偶地址
地址分段结构和物理地址形成
8086内部处理器结构
总线工作周期:概念,时钟周期,指令周期,等待周期,,,关系是啥
中断系统,硬件中断与软件中断,类型码,优先级,
中断向量与中断向量表
堆栈!
8086引脚,知道地址线,数据线,端口,地址线
8086
存储器组织
寻址空间和数据存储格式
8086地址总线20位
主流微处理器,寻址能力超过实际容量
- 字节数据:偶地址:最低位=0 奇地址:最低位=1
- 字数据:存放在两个连续的字节单元中,低字节地址作为该字地址,若位于偶地址,称为规则字,否则为非规则字
- 双字数据:占用4个连续字节单元,并规定最低字节地址为双字地址。
8086系统1MB内存分为两块,和数据总线D15-D8相连的块为高地址块(奇地址块)D7-D0相连为低地址块(偶地址块)
内部结构
BIU为总线接口部件,EU为执行部件
BIU存取指令和数据,EU执行指令
工作方式:EU和BIU并行执行
- 当指令队列有两个孔子姐,BIU自动寻找空闲总线周期进行预取指令操作
- 当指令队列缓冲器有指令,EU执行
- EU执行转移,调用,返回,BIU清空指令队列
寄存器结构
SP:用于指示栈顶的偏移地址?
BP:存放堆栈中的一个基地址?见堆栈
SI:与DS联用时,确定数据段的某一存储单元地址;在串处理指令中,SI放隐含的源变址。
DI:目的变址寄存器
IP:存放下一条指令的偏移地址,与CS结合,只想指令存放单元的物理地址,取字节+1,取字+2
标志寄存器:
CF与OF区别:
OF是反映带符号数(以二进制补码表示)运算结果是否超过机器所能表示的数值范围的情况
对于8位的字节运算,数值范围为**-128~+127**
溢出和进位是两个不同的概念,某些运算结果,有“溢出”不一定有“进位”,反之,有“进位”也不一定有“溢出”。
PF:注意是低八位
AF:
DF:
串操作:见8086串操作
工作周期
总线:系统中各个部件进行信息交换的公共通道
总线周期:CPU通过总线对存储器或外设I/O接口进行一次访问所需时间,由四个时间周期组成,称为$T_1,T_2,T_3,T_4$
等待周期:3个T周期无法完成数据读写,因此加入等待周期,直到数据读写完毕
空闲周期:在一个总线周期后不立即执行下一个总线周期,即无数据传输要求,插入空闲周期
指令周期:开始取指令到执行完毕
一个指令周期由一个或若干个总线周期组成
基本引脚
地址/数据总线:$AD_{15} -AD_0$
地址/状态总线:$A_{19}/S_6 -A_16/S_3$
控制总线
其他:
8086中断系统
中断类型
按中断产生原因,共有256个中断源,都有一个唯一的中断识别号/中断类型码,0~255
硬件中断:两条硬件中断请求信号线:NMI(非),INTR(可)
- 非屏蔽中断:可以用cpu指令CLI来屏蔽(使IF=0),也可以用指令STI允许(IF=1),识别号:08H~0FH
- 可屏蔽中断:优先权更高,不可屏蔽,紧急情况的故障处理。识别号:02
软件中断:内部中断
- 除法中断:类型码:0
- 单步中断:类型码:1
- 断点中断:类型码:3
- 溢出中断:类型吗:4
- 中断指令INT n 引起:CPU立即产生中断类型号为n的中断响应
中断优先权:
除法,溢出,INT n
NMI
INTR
单步
中断向量与中断向量表
中断向量表:存储中断程序的地址,包括段地址和偏移地址
中断过程
DOS操作系统:见系统功能调用
基本输入输出系统BIOS:
Q&A
Q:8086被复位以后,有关寄存器的状态是什么?微处理器从何处开始执行程序?
A:标志寄存器、IP、 DS 、 SS 、 ES 和指令队列置 0 , CS 置全 1(FFFFH) 。
处理器从 FFFF0H 存储单元取指令并开始执行。
Q:8086 为什么采用地址 / 数据引线复用技术?
A:考虑到芯片成本和体积, 8086 采用 40 根引线的封装结构。
由于 40 条 根线无法直接引出 8086 的全部 20 位地址、 16 位数据 、诸多控制信号和状态信号,因此采用地址 / 数据线复用引线方法解决这一矛盾。
从逻辑角度来看,地址与数据信号不会同时出现,二者可以分时复用同一组引线
==若以最少访问次数而言,可以如下操作:从奇地址 400A5H 中读出 1 个字节 11H ;从偶地址开始 400A6H 、 400A7H 两个单元 读出 1 个 字 3322H ;从偶地址 400A8H 、 400A9H 两个单元读出 1 个字 5544H ;从偶地址 400AAH 中读出 1 个字节 66H 。最少读 4 次。?==
寻址方式与指令系统
8086寻址方式
形成指令地址或操作数地址的方式,称为寻址方式
数据寻址方式
立即数寻址方式、寄存器寻址方式、存储器寻址方式、 I/O 端口寻址
立即寻址:直接给出操作数本身 MOV AL,251
寄存器寻址:操作数在寄存器中,所以直接将寄存器的值copy到目标寄存器
存储器寻址:操作数存放在内存储器中(内存中),通过直接查询物理地址找到对应操作数,此时段地址在DS中,而偏移地址则由下列方式给出,找到操作数后再将其交给寄存器
直接寻址
MOV AX,[1000H]=MOV AV, TABLE=MOV AV, [TABLE]
寄存器间接寻址
MOV AL,[SI]
NOTE:SI内容为操作数的偏移地址,CPU会根据此偏移地址找到对应的操作数,然后交给AL,不同于
MOV AL,SI
,这是把SI的内容交给AL,但是字节数不对应,所以会报错寄存器相对寻址
MOV AX,6 [BX]
=MOV AX,[BX]+6
基址加变址寻址
MOV DX, [BX][SI]
NOTE:一部分存于基址寄存器(BX或BP)中,另一部分存于变址寄存器(SI或DI)中,在不指定段的情况下,规定:如果有效地址中含有BP,则默认的段寄存器为SS;否则,默认的段寄存器为DS相对基址加变址寻址
MOV 10H[ BP ] [ SI ], CX
一部分存于变址寄存器 SI 或 DI 中;
一部分存于基址寄存器 BX 或 BP 中;
一部分为指令中给出的8位或16位的偏移量
I/O端口寻址
- 端口直接寻址方式
IN AL,21H
NOTE:8位立即数(0~255)表示端口地址,超范围用下面,此处的21H为端口地址,表示将21H内的内容输入到AL - 端口间接寻址方式
MOV DX,120H
OUT DX,AX
由于DX内为16位,可以表示0-65535
- 端口直接寻址方式
指令寻址方式
确定下一条要执行指令地址的方法
顺序寻址
程序的执行,一般是从存储器中代码段 顺序取指令执行
指令地址:CS指定段地址,IP指定偏移地址
跳转寻址
在某些条件下,程序的执行要跳转到另外一段程序开始顺序执行
段内转移:转移的目标地址在当前的代码段内
转移指令中要指出转到的目标地址,CPU修改 IP 的值
分为:直接、间接(根据目标地址给出的方式)
也可以分为:立即数、寄存器操作数、存储器操作数;
直接:位移量为 8 位时,称段内直接短转移;位移量为 16 位时,称段内直接近转移
条件转移指令的位移量只能是8位,而无条件转移的指令可以是8位,也可以是16位。
1
2
3指令名 SHORT 转移目标地址标号
指令名 转移目标地址标号
指令名 NEAR PTR 转移目标地址标号间接寻址:由转移指令中指定一个16位寄存器或存储器字单元的内容做为转移的有效地址,直接取代(IP)的内容。
1
2
3指令名 16位寄存器名
指令名 WORD PTR 存储器寻址方式
指令名 存储器寻址方式
段间转移:转移的目标地址在另一个代码段内
转移指令中要指出转到代码段的段基址及该段内的目标地址, CPU修改 CS 和 IP 中的值
分为:直接、间接
直接:转移指令中直接给出了转向目标的段基址和段内偏移地址(第一个字:IP,第二个字:CS)
1
2指令名 FAR PTR 转移地址标号
指令名 段地址:段偏移地址间接:在转移指令中给出一个存储单元的地址,用该地址所指的两个相邻字单元的内容(32位)来取代CS和IP中的内容,从而达到段间转移的目的
1
2;指令名 DWORD PTR 存储器寻址方式
JMP DWORD PTR [SI];(IP)=(16d ×(DS)+(SI)) (CS)= (16d ×(DS)+(SI)+2)
指令系统
关于MOV指令的禁忌:no_entry_sign:
seg:segment,段寄存器
堆栈
按字操作,初始化:指向栈底+1的地址
SP:堆栈指针,即偏移地址
PUSH:先SP-2,然后再放数据
- PUSH,POP不能立即寻址,POP不能使用CS
- 不影响标志位
- 配对使用
POP:先取数据,再SP+2
地址传送
LEA:
格式:LEA REG,MEM ;
功能:将MEM操作数的有效地址(16位偏移地址)送到寄存器REG中
NOTE:源操作数必须是存储器操作数,而目的操作数必须是16位通用寄存器
LDS/LES:将段地址一起传送
LDS将段地址传送到DS,LES则送到ES
标志寄存器
LAHF:读取标志指令,将低八位数据送到AH
SAHF:(set)设置标志指令,与上相反
PUSHF/POPF:操作全16位!
数据交换
格式:XCHG OPR1,OPR2 ;
功能:将两个操作数(字或字节)相互交换位置
NOTE:① 源、目的操作数的寻址方式不允许是立即寻址方式。
② 两个寻址方式中,必须有一个是寄存器寻址,两个存储单元之间不能直接互换数据。
③ 所有的段寄存器以及IP寄存器不允许使用本条指令与其他寄存器互换数据。
④ 此指令不影响标志位
算数运算
不带进位加/减法:ADD,SUB(带符号数)
带:ADC,SBB
取负:NEG
关于减法:实际内部运算时是补码计算
逻辑运算
TEST指令:不影响对应的数
逻辑与:清0 或:置1
NOT不影响标志位,其他使CF,OF=0,按结果设置SF,PF,ZF,AF无定义
移位指令
NOTE:影响CF,PF,SF,ZF,OF
OF设置:
指令系统!背!
MOV指令的限制!
堆栈,左移,lea,les,test指令
十进制运算
希望计算机接受十进制数,并以十进制输出
压缩型BCD码:一个字节可存放一个两位十进制数,其中高四位存放十位数字,低四位存放个位数字。如:56的压缩型8421 BCD码是0101 0110;
非压缩型BCD码:一个字节可存放一个一位十进制数,其中高字节为0,低字节的低四位存放个位。如:5的非压缩型BCD码是0000 0101,必须存放在一个字节中,56的非压缩型BCD码是00000101 00000110,必须存放在一个字中。
原理:以二进制计算,最后输出前调整即可(相加>9的位数+06H)
eg:0DH->13H
调整指令:DAA,DAS(压缩) AAA,AAS(非压缩),AAM(乘法),AAD(除法)
DAA:AL低4位>9 或 AF=1 AL=AL+06H,AF=1
AL高4位>9 或 CF=1 AL=AL+60H,CF=1
AAA:若AL低4位大于9或AF=1,则AL+6,AH+1,CF和AF置1,AL高4位清0; 否则AL高4位清0,CF和AF置0,
程序控制指令
例:
NOTE:JMP [20000+5+10]=JMP [20015H]->IP=3412
各种转移指令:
①根据S、Z、C、P和O的值来决定是否进行转移的指令
②比较两个无符号数的大小的转移指令
③比较两个有符号数的转移指令
④测试CX的值为0,则转移的指令
格式: JCXZ 地址标号
功能:若CX寄存器的内容为零则转移到指定地址标号处。
⑤循环控制指令
LOOPZ /LOOPE:(CX)≠0且ZF=1 ,当为0或相等时循环
LOOPZ/LOOPNE:(CX)≠0且ZF=0,当不为0或不相等时循环
输入输出指令
IN
OUT
查找指令
XLAT
1 | X DW 1122H,3344H,5566H,7788H;假设X变量就是一个用于转换的表 |
在执行XLAT之前,先将X的地址送给BX,偏移次数送给AL。
XLAT即为查找指令 (一个字节)。
结果AL为33H。
XLAT作用:将((BX)+(AL))送给(AL)—-简单:将BX为首地址的,偏移地址为AL的内容送给AL。
在运行XLAT之前,AL=3 BX=(X的首地址)。
这时BX+AL就是33…为什么?注意高地址放在下面!。
也就是。
22——BX指向这里。
11
44。
33—–偏移地址AL为3的位置就是这里。
XLAT X。
在执行XLAT之前,先将X的地址送给BX,偏移次数送给AL。
XLAT即为查找指令 (一个字节)。
汇编语言程序设计
字符常量:用单引号’ ’括起来的ASCII字符,其值是该字符的ASCII代码值
数值表达式:数值允许用二进制、八进制、十进制、十六进制形式书写
②?:表示不预置确定的初值
③字符串表达式:用引号括起来的不超过255个字符或其他ASCII码符号。
•DB伪指令将按顺序为字符串中每一个字符或符号分配一个字节单元,存放它们的ASCII编码,
•但DB以外的数据定义伪指令只允许定义最多两个字符的字符串,且按逆序存放在低地址开始的单元。
注意:3个及其以上的字符,只能用DB定义。当字符串的长度不超过两个字符时可用DW定义。
DW:低位字节在第一个字节地址,高位在第二个
运算符与表达式
TYPE:变量字节数
逻辑运算符不能用于地址表达式!
逻辑运算符在汇编阶段完成,逻辑运算指令在程序执行完成
关系运算符:
半导体存储器
概述
分类
性能指标
容量
以字节为单元,32MB=32M×8
存储器芯片容量=单元数×位数
内存以一个字节为单元,但可同时对2,4,8个单元进行访问
存取周期
指实现一次完整的读出或写入数据的时间,是存储器连续启动两次读或写操作所允许的最短时间间隔。
功耗
半导体存储器属于大规模集成电路,集成度高、体积小,但是不易散热,因此在保证速度的前提下应尽量减小功耗。
可靠性
指存储器对电磁场、温度变化等因素造成干扰的抵抗能力(电磁兼容性),以及在高速使用时也能正确地存取(动态可靠性)
集成度
指在一块数平方毫米芯片上所制作的基本存储单元数,常以“位/片”表示,也可以用“字节/片”表示。
其他
随机读/写存储器 RAM
静态MOS存储器
A=1,B=0 存1
X=1,5,6导通
地址译码
地址译码方式
全地址译码,部分地址译码。
全地址译码
构成存储器时要使用全部地址总线信号,即所有的高位地址信号用来作为译码器的输入,低位地址信号接存储芯片的地址输入线。
存储器芯片上的每一个单元在整个内存空间中具有唯一地址。
部分地址译码
- 仅把地址总线的一部分地址信号线与存储器连接,通常是用高位地址信号的一部分(而不是全部)作为片选译码信号。
输入输出技术
输入输出接口
基本功能
接口基本结构
I/O端口:能被CPU直接访问的寄存器的地址
数据端口、状态端口和控制端口
数据端口
- 对来自或者送往CPU和内存的数据起缓冲作用
- 数据输出寄存器锁存CPU送出的数据信息,以提供给外设; 数据输入寄存器暂存由外设传递给主机的数据信息。
状态端口
- 存放外围设备或者接口部件本身的状态
- 外设通过状态寄存器存放向CPU提供的可查询的外设状态信息,CPU可通过数据线读回,并根据外设的状态信息采取相应措施
控制端口
- 存放CPU发出的命令,以便控制接口和设备的动作。
- 控制寄存器接收来自CPU的控制命令字,并将它们转换为外设可识别的操作命令。
地址译码器
- 对接口电路内部寄存器地址进行译码,选中某一个寄存器。
控制逻辑
接收来自CPU的命令,控制接口中的各个部件协调工作。
对于采用中断方式或DMA方式与主机进行数据交换的外设,其接口电路还可以设置中断/DMA控制逻辑部分。
基本方法
程序控制
无条件传送方式和查询方式。
查询方式
CPU通过程序不断查询相应设备的状态,若状态不符合要求,则CPU不能进行输入/输出操作,需要等待; 只有当状态信号符合要求时,CPU才能进行相应的输入/输出操作。
选通信号有两个作用: 一是把外设的数据送到接口的锁存器中; 二是使接口中的一个D触发器置1,从而使三态缓冲器的READY=1。
中断控制
同步:CPU在大部分时间里可与外设并行工作,大大提高了工作效率。
实时:利用中断技术可使计算机对被控对象的物理参数作出即时响应
故障处理:可以利用中断系统及时地处理计算机在运行过程中出现的事先预料不到的情况或一些故障。
中断识别
向量中断:由中断向量来指示中断服务程序的入口地址
查询中断:采用软件或硬件查询技术来确定中断源
软件查询法:由软件来安排各中断源的优先级别。常用方法有屏蔽法和位移法。
① 屏蔽法
- 取连接外部中断源端口的状态字,然后检查每一位,先检查到的优先级高。
②位移法
- 将读取的状态字节大循环移位(RCL/RCR),每移动1位 ,判断被移进CF的值是否为1,若是,转去中断;否则,继续移一位再判断。
优点
- 不需要额外的硬件电路,并且优先权由查询的次序来决定,首先查询的即为优先级最高的。
缺点
- 不管外设是否有中断请求都需要按次序逐一询问,因而效率较低,特别是在中断源较多的情况下,转至中断服务程序的时间较长。
硬件判优电路法
由专门的判优电路决定中断源的优先级别
基本思想是:电路上面端口的中断请求可以屏蔽下面的中断请求。
优点
- 中断源较多的情况下,转至中断服务程序的时间比软件查询法快。
缺点
- 优先权的次序是固定的,不能更改,并且增加了硬件设计的成本。
直接存储器存取方式
通道方式
外围处理机方式
常用接口器芯片
可编程接口芯片8255
概念
并行通信
串行通信
并行接口
状态寄存器
空寄存器
数据缓冲寄存器
数据输入过程
数据输入过程指的是外设向CPU输入数据的过程。
①当外设将数据通过数据输入线送给接口时,先使状态线“输入数据准备好”为高电平,然后通过接口把数据送到输入缓冲寄存器中,同时把“输入回答”信号置成高电平1发给外设。
②外设接到回答信号后,将撤销“输入数据准备好”信号。在接口收到数据后,它会在状态寄存器中设置“准备好输入”状态位,以便CPU对其进行查询。
③接口向CPU发出一个中断请求信号,这样CPU可以用软件查询方式或中断的方式将接口中的数据输入到CPU中。
④CPU在接收到数据后,将“准备好输入”的状态位自动清除(因为外设处理数据速度远远小于CPU),并使数据总线处于高阻状态,准备外设向CPU输入下一个数据。
数据输出过程
数据输出过程指的是CPU向外设输出数据的过程。
①当外设从接口接收到一个数据后,接口的输出缓冲寄存器“空”,使状态寄存器的“输出数据准备好”状态位置成高电平1,这表示CPU可以向外设接口输出数据,这个状态位可供CPU查询。
②此时接口也可向CPU发出一个中断请求信号,同上面的输入过程相同,CPU可以用软件查询方式或中断的方式将CPU中的数据通过接口输出到外设中。当输出数据送到接口的输出缓冲寄存器后,再输出到外设。
③与此同时,接口向外设发送一个启动信号,启动外设接收数据。外设接收到数据后,向接口回送一个“输出回答”信号。
④接口电路收到该信号后,自动将接口状态寄存器中的“准备好输出” 状态位重新置为高电平1,通知CPU可以向外设输出下一个数据。(因为CPU处理数据速度快!)
确定端口地址
方式控制字
1输入,0输出!
D6-D3 A组控制
状态字
注意:C口的状态字与C口各位对外的引脚状态不完全一致!!!
当8255的A口和B口均工作在方式1的输入时,由C口读出的8位数据各位的意义如图所示。
例题:
利用8255方式0实现打印机的接口。
分析:打印机打印计算机送来的ASCII码字符。因为ASCII码为8位,所以利用8255的A口的工作方式0来实现打印机与CPU之间的并行输出接口,连接示意图如图8.16所示。由图可见,由地址译码决定的A口、B口、C口及控制寄存器的端口地址分别为380H、381H、382H、383H。
初始化: A口为输出,C口的高4位为输出、低4位为输入,B口保留,A、C口均工作于方式0。
1 | MOV DX,0383H ; 将控制寄存器端口地址送DX中 |
关于ASCII码
A与a:a=97,A=65,a-A=32
0与A:0=48,A-0=17
30H,从数字转化为ASCII