首先,奉上思维导图。教材为《微机原理与接口技术》(第2版)李珍香主编 清华大学出版社。一万多字的总结。某些部分需要配合课本。
目录
微机原理与接口技术
-
微型计算机基础
-
- 微型计算机概述
计算机系统是一种由硬件系统和软件系统组成的复杂电子装置。它能够存储程序、存储原始数据、中间结果和最终运算结果,并自动完成运算,是一种能对各种数字化信息进行处理的“信息处理机”。
计算机按照性能、价格和体积等综合指标,可分为巨型计算机、大型计算机、小型计算机、微型计算机。
- 微型计算机概述
-
-
- 微型计算机的发展
微型计算机是指以微处理器为核心,并配有以大规模集成电路构成的内存储器、输入/输出接口电路、输入/输出设备及系统总线所构成的裸机。微型计算机的产生和发展都以微处理器为标志。
微处理器就是计算机中的中央处理器(CPU),1971年世界上第一块微处理器4004诞生,至今,微处理器的发展已经历6代。 - 微型计算机的特点
微型计算机具有一般计算机的运算速度快 、计算精度高、记忆功能和逻辑判断力强、可自动连续工作等基本特点。
自身特点:1、功能强、可靠性高
2、价格低廉
3、系统设计灵活,适应性强
4、体积小,重量轻,维护方便
- 微型计算机的发展
-
-
- 微型计算机系统的组成
-
-
- 微型计算机系统的概念
微型计算机系统是以微型计算机为主体,按不同应用要求,配以相应的外部设备、辅助电路以及指挥微型计算机工作的系统软件所构成的系统。
微型计算机系统由硬件和软件两大部分组成。硬件主要包括主机和外部设备。软件分为系统软件和应用软件。系统软件中最主要的是操作系统。操作系统是微机系统必备的系统软件,其主要作用是管理微机的硬、软件资源,提供人机接口,为用户创造方便、有效和可靠的微机工作环境。 - 微型计算机系统的硬件结构及其功能
微型计算机的硬件主要由微处理器、内存储器、I/O接口电路及系统总线组成
- 微型计算机系统的概念
-
-
-
-
- 1. 微处理器(CPU)
微处理器是微型计算机的核心部件,是整个系统的运算和指挥控制中心负责统一协调、管理和控制系统中各个部门有机地工作。CPU的组成主要由运算器、控制器、寄存器组 - 2. 存储器
存储器用来存放数据和程序,是计算机各种信息的存储和交流中心。按照存储器在计算机中的作用,可分为内存储器、外存储器和高速缓冲存储器。
内存储器是一个记忆装置,也称为主存储器。是CPU可以直接访问的存储器,主要用来存储微机工作过程中需要操作的数据、程序,运算的中间结果和最后结果。内存储器的主要工作是读/写操作。
外存储器也称辅助存储器,用于存放暂时不用的程序和数据,不能直接与CPU交换数据,需要通过接口电路来实现。常用的外存储器有硬盘、U盘。 - 3. I/O接口电路
I/O接口电路的功能是完成主机与外部设备之间信息交换。 - 4. 总线
微型计算机系统采用总线结构将CPU、存储器和外部设备进行链接。微机中的总线是由一组导线和相关控制程序电路组成,是各种公共信号线的集合,用于微机系统各部件之间的信息传递。根据总线传送的内容的不同,微机中的总线可分为数据总线、地址总线、控制总线。
- 1. 微处理器(CPU)
-
-
-
-
-
-
- 数据总线(DB)
数据总线是一组双向、三态总线,主要用来实现在CPU与内存储器或I/O接口之间传送数据。数据总线的条数决定了传送数据的位数。 - 地址总线(AB)
地址总线是一组单向、三态总线,是由CPU输出,用来指定其要访问的存储单元或I/O接口的地址的。 - 控制总线(CB)
控制总线是一组单向、三态总线,用于传送控制信号、时序信号和状态信息,实现CPU的工作与外部电路的工作同步。
- 数据总线(DB)
-
-
-
-
-
-
- 5. I/O设备
I/O设备即输入/输出设备,又称为外部设备或外围设备,简称外设,是用户与微机进行通信联系的主要装置,
其中输入设备是把程序、数据、命令转换成微机所能识别接收的信息,然后输入给微机。
输出设备是把CPU计算和处理的结果转换成人们易于理解和阅读的形式,然后输出到外部。
- 5. I/O设备
-
-
-
-
- 微型计算机的基本工作原理和工作过程
计算机采用“程序存储控制”的原理工作,此原理是冯•诺依曼于1946年提出,它构成了计算机系统的结构框架。
计算机工作有两个基本能力:一是能存储程序,二是能自动执行程序。因此,微机的工作过程就是:执行存储在存储器中的程序的过程。执行一条指令需要4个基本操作:(1)取指令;(2)分析指令;(3)执行指令;(4)为执行下一条指令做好准备,即取出下一条指令。 - 微型计算机的主要性能指标
微型计算机的性能由它的系统结构、指令系统、硬件组成、外部设备及软件配置等多方面因素综合决定。最常用的性能指标有以下几项:(1)字长;(2)存储容量;(3)运算速度;(4)存取时间和存取周期;(5)可靠性和可维护性;(6)性能价格比。
- 微型计算机的基本工作原理和工作过程
-
-
- 数制和编码
-
-
- 常用数制
数制:是指用一组固定的符号和统一的规则来表示数值的方法,若在计数过程中采用进位的方法,则称为进位计数制。
数位:指数码在一个数中所处的位置。
基数:指在某种进位计数制中,数位上所能使用的数码个数,也指这个计数系统中采用的数字符号个数。
位权:也称权,是指在某种进位计数制中,不同位置上数码的单位数值。 - 进制转换
二进制
十进制
十六进制 - 二进制数的运算
算术运算:
加:逢二进一
减:借一当二
乘除:与十进制相似
逻辑运算:
与:有一个为0即为0
或:有一个为1即为1
非:取反
异或:相同为0,不同为1 - 带符号数在计算机中的表示
机器数:连同数的符号一起数字化了的数据称为机器数。例如:X= +91 = 01011011B Y = -91 =11011011B
真值:与机器数对应的用正、负符号加绝对值来表示的实际数值。例如:X= +91 = +1011011B Y = -91 = -1011011B
原码:是一种简单直观的机器数表示方法。
反码:在原码的基础上,符号位不变,其余按位求反。
补码:在反码的基础上,在末位加1。
- 常用数制
-
-
8086微处理器
-
- 微处理器内部基本结构
微处理器的基本功能如下:
(1)能够进行算术运算和逻辑运算;
(2)能对指令进行译码、寄存并执行指令所规定的操作;
(3)具有与存储器和I/O接口进行数据通信的能力;
(4)暂存少量数据;
(5)能够提供这个系统所需的定时和控制信号;
(6)能够响应I/O设备发出的中断请求。
intel8086微处理器是典型的16位微处理器,在内部采用了并行流水线结构,可以提高CPU的利用率和处理速度。
- 微处理器内部基本结构
-
-
- 8086CPU功能结构
从功能角度看,8086CPU的内部结构可分为两大部分,总线接口部件(BIU)和执行部件(EU)。这两大部件通过内部总线连接,可以协同工作也可以独立工作。
- 8086CPU功能结构
-
-
-
-
- 总线接口部件(BIU)
BIU是CPU与存储器及I/O的接口,负责与存储器和外设之间的信息传送。
BIU主要由以下几部分组成:
(1)20位地址加法器
20位地址加法器用于将逻辑地址变换成存储器所需的20位物理地址,即完成地址加法操作。
(2)指令队列缓冲器
它是一个具有6个字节的“先进先出”的RAM存储器,用来按顺序存放CPU要执行的指令代码,并送入EU中去执行。
(3)总线控制电路
总线控制电路用于产生并发出总线控制信号,以实现对存储器或I/O端口的读/写控制。 - 执行部件(EU)
EU负责指令的译码和执行。它不断地从BIU的指令队列中取出指令、分析指令并执行指令,在执行指令过程中所需要的数据和执行的结果,也都由EU向BIU发出请求,再由BIU对存储器或外设进行存取操作来完成。
EU主要包括以下几个部分:
(1)算术逻辑单元ALU
(2)暂存寄存器
(3)标志寄存器
(4)通用寄存器
(5)EU控制器
- 总线接口部件(BIU)
-
-
-
-
- 8086CPU的寄存器结构
为了提高CPU的运算速度,减少访问存储器的存取操作,8086CPU内置了相应寄存器,用来暂存参加运算的操作数及运算的中间结果。
8086CPU内部提供有14个16位的寄存器。
- 8086CPU的寄存器结构
-
-
-
-
- 通用寄存器
-
-
-
-
-
-
- 数据寄存器
这些寄存器可以用作存放算术、逻辑运算的源操作数,向ALU提供参与运算的原始数据,也可以用作存放目的操作室,保存运算的中间结果或最后结果。
- 数据寄存器
-
-
-
-
-
-
-
-
- AX
- BX
- CX
- DX
-
-
-
-
-
-
-
-
- 地址指针和变址寄存器
这些寄存器主要用来存放或指示操作数的偏移地址。
- 地址指针和变址寄存器
-
-
-
-
-
-
-
-
- 堆栈指针寄存器 SP
存放的是当前堆栈段中栈顶的偏移地址。 - 基数指针寄存器 BP
存放的是堆栈中某一存储单元的偏移地址。 - 源变址寄存器 SI
用来存放当前数据所在段的存储单元的偏移地址,在串操作指令中SI规定用作存放源操作数的偏移地址。 - 目的变址寄存器 DI
与SI一样用来存放当前前数据所在段的存储单元的偏移地址,此外,在串操作指令中,DI规定用作存放目的操作数的偏移地址。
- 堆栈指针寄存器 SP
-
-
-
-
-
-
-
- 段寄存器
存放各段的段地址
- 段寄存器
-
-
-
-
-
-
- 代码段 CS
- 数据段 DS
- 附加段 ES
- 堆栈段 SS
-
-
-
-
-
-
- 控制寄存器
-
-
-
-
-
-
- 指令指针寄存器 IP
用来存放代码段中的偏移地址,在程序运行过程中,它始终指向下一条要执行的指令的地址。 - 状态标志寄存器 Flags
- 指令指针寄存器 IP
-
-
-
-
-
-
-
-
- 状态标志位
-
-
-
-
-
-
-
-
-
-
- 进位标志位 CF
- 奇偶标志位 PF
- 辅助进位标志位 AF
- 零标志位 ZF
- 符号标志位 SF
- 溢出标志位 OF
-
-
-
-
-
-
-
-
-
-
- 控制标志位
-
-
-
-
-
-
-
-
-
-
- 中断允许标志位 IF
- 方向标志位 DF
- 追踪标志位(单步标志) TF
-
-
-
-
-
-
- CPU的存储器组织及I/O结构(详情见P33~P37)
- CPU的外部引脚及工作模式(详情见P37~P43)
8086CPU可以工作在最小和最大两种工作模式下。
最小模式,是指在系统中只有一个8086微处理器的情况,所有的总线控制信号都直接由8086CPU产生。
最大模式,此模式下,总是包含两个或两个以上微处理器,其中一个主处理器就是8086,其他处理器称为协处理器,辅助主处理器工作。
CPU工作在哪种模式下由硬件决定。当CPU处于不同工作模式时,部分引脚的功能是不同的。
(1)引脚功能。引脚功能即引脚所起的作用,从引脚名称上大致可以反映出来,
(2)引脚的流向。指引脚的方向是从芯片本身流向外部(输出)还是从外部流入芯片(输入),抑或是双向的。
(3)有效方式。指引脚发挥作用时的特征。总的来说,引脚有两种有效方式,一种是点评有效(高电平和低电平),另一种是边沿有效(上升沿有效和下降有效)
(4)三态能力。主要针对输出方向的引脚,共有高电平、低电平和高阻三种状态。 - CPU的总线操作与时序
微型计算机中的各个部件之间是通过总线来传输信息的,为了保证使用总线的各个部件能有序地工作,必须使各部件按规定的时间顺序工作,因此必须建立总线时序。微机CPU总线时序通常分为三级,即时钟周期,总线周期,指令周期。
-
-
- 时钟周期
8086CPU的各种操作是在时钟脉冲CLK的统一控制下协调同步进行的,时钟脉冲是一个周期性的脉冲信号。一个时钟脉冲的时间长度称为一个时钟周期,是主频的倒数。时钟周期是CPU的基本时间计量单位,也是时序分析的刻度,8086的主频为5MHz,时钟周期为200ns。 - 总线周期
总线周期是CPU通过总线对存储器或I/O接口进行一次访问所需要的时间。一个基本的总线周期由4个时钟周期。 - 指令周期
CPU执行一条指令所需要的的时间(包括取指令的总线周期和执行指令所代表的具体操作所需要的时间)一个指令周期是由一个或者几个总线周期组成的,不同指令的指令周期是不等长的,最短为一个总线周期。 - 总线操作与时序(详情见P44~P49)
8086CPU的操作可分为内部操作与外部操作两种。内部操作是CPU内部执行指令的过程。外部操作是CPU与其外部进行信息交换的过程,主要是指总线操作。
8086CPU的总线操作主要有:系统复位和启动操作、总线读写操作、总线保持或总线请求/允许操作、中断响应操作。这些操作均是在时钟信号的同步下按规定好的先后时间顺序一步一步执行的,这些执行过程构成了系统的操作时序。
- 时钟周期
-
-
- 其他微处理器
-
-
- 80486CPU(详情见P50~P67)
-
-
寻址方式
-
- 指令系统概述
-
-
- 指令的基本概念
-
-
-
-
- 指令是控制计算机完成指定操作并能够被计算机所识别的操作命令。
计算机通过执行程序来完成指定的任务,而程序是由完成一个完整任务的一系列有有序指令组成的。每种计算机都有一套能反映计算机全部功能的指令,这些所有指令的集合称为该机的指令系统。指令系统定义了计算机硬件所能完成的基本操作,其功能的强弱在一定程度上决定了硬件系统性能的高低。指令系统也是计算机硬件和软件之间的桥梁,是汇编语言程序设计的基础。 - 机器指令是一组二进制编码的指令,是计算机能够直接识别和执行的指令。用助记符或符号来表示操作码或操作数的指令就是汇编指令。汇编指令与机器指令间是一一对应的
- 指令是控制计算机完成指定操作并能够被计算机所识别的操作命令。
-
-
-
-
- 指令格式
-
-
-
-
- 指令的组成
-
-
-
-
-
-
- 计算机机中指令通常由操作码和操作数两部分构成。操作码部分规定计算机要执行的操作。操作数部分(又称地址码)用来描述该指令要操作的对象。
一个指令字中包含二进制代码的位数,称为指令字长度。
指令字长度等于机器字长的指令,称为单字长指令。
指令字长度等于半个机器字长的指令,称为半字长指令。指令字长度等于两个机器字长的指令,称为双字长指令。
- 计算机机中指令通常由操作码和操作数两部分构成。操作码部分规定计算机要执行的操作。操作数部分(又称地址码)用来描述该指令要操作的对象。
-
-
-
-
-
-
- 8086汇编指令格式
-
-
-
-
-
-
- 格式如下: [ 标号:] 操作码 操作数 [ ;注释 ]
(1)标点
标号表示一条指令在代码段中的偏移地址。在汇编源程序中只有在需要转向一条指令时,才为该指令设置标号,以便在转移或循环指令中直接引用这个标号。标号和其后的操作码之间必须用冒号“:”分隔。
(2)操作码
操作码又称为指令码或助记符,用来规定计算机要执行的具体操作。
(3)操作数
操作数是指令执行过程中参与指令操作的对象,它的表现形式比较复杂,可以是操作数本身,也可以说是操作数地址或是地址的一部分,还可以是指向操作数地址指针或其他有关操作数据的信息。注意:当是双操作数时,两个操作数间必须用逗号隔开,并称逗号左边的操作数为目的操作数,逗号右边的操作数为源操作数。
- 格式如下: [ 标号:] 操作码 操作数 [ ;注释 ]
-
-
-
-
-
-
- 操作数类型
-
-
-
-
-
-
- 立即操作数
立即操作数简称立即数,是指具有固定数值的操作数(即常数)。 - 寄存器操作数
事先存放在CPU的8个通用寄存器和4个段寄存器中的操作数为寄存器操作数,在指令执行时只要知道寄存器名就可以寻找到操作数。寄存器操作数既可以作为源操作数使用,也可以作为目的操作数使用。 - 存储器操作数
事先存放在内存中的操作数为存储器操作数,在指令中,只要知道存放操作数的存储单元的偏移地址就可以寻找到该操作数,存储器操作数既可以作为源操作数使用,也可以作为目的操作数使用。
- 立即操作数
-
-
-
-
- 立即寻址(MOV BL,5102H)
立即寻址方式所提供的操作数直接包含在指令中,此操作数紧跟在操作码后面,与操作码一起存放于内存的代码段,在CPU取指令时,立即数随指令码一起取出并直接参与运算。立即寻址方式中的操作数只能用于源操作数,主要用来给寄存器或存储单元赋初值。
- 寄存器寻址(MOV AX,CX)
寄存器寻址的操作数存放在CPU的某个寄存器中,在指令中,写出指定的指定的寄存器名即可。
- 存储器寻址
在存储器寻址方式中,操作数存放在内存的存储单元中,执行指令时,CPU要访问到操作数必须先计算出存放该操作数的存储单元在内存中的物理地址,然后才能进行数据读/写的操作。
- 立即寻址(MOV BL,5102H)
-
-
- 直接寻址(MOV AX,[2000H])
在直接寻址方式中,指令中的操作数部分直接给出操作数的偏移地址,且该地址与操作码一起被放在代码段中。
- 寄存器间接寻址(MOV AX,[BX])
在寄存器间接寻址方式中,操作数的偏移地址在指令指明的寄存器中,即寄存器的内容就是操作数的偏移地址,而操作数存放在存储器中。对于寄存器间接寻址,存放操作数偏移地址的寄存器只能是BX、BP、SI、DI。
- 寄存器相对寻址(MOV AX,COUNT[BX] )
在寄存器相对寻址方式中,操作数的偏移地址由一个基址或变址寄存器与指令中指定的8位或16位位移量形成。即EA = {BX,BP,SI,DI}+(8/16位)位移量。 - 基址变址寻址(MOV AX,[BX][DI])
在基址变址寻址方式中,操作数的偏移地址由一个基址寄存器(BX或BP)和一个变址寄存器(SI或DI)的内容相加而成。 - 基址变址相对寻址(MOV DX,disp[BX][DI])
在基址变址相对寻址方式中,操作数的偏移地址由一个基址寄存器、一个变址寄存器,同时还用一个由指令中指定的8位或16位位移量三者内容之和的形成。
- 直接寻址(MOV AX,[2000H])
-
-
指令系统
-
- mem:存储器操作数。 opr:泛指各种类型的操作数。 src:源操作数。 dest:目的操作数。 label:标号。 disp:8位或16位位移量
- port:输入输出端口,可用数字或表达式表示。 [ ] :整体上是一存储器操作数。 reg:寄存器。 count:移位次数。可用是1或CL。 S_ins:串操作指令。
- 数据传送类指令
-
-
- 通用数据传送指令 MOV (格式:MOV dest,src )
功能:将源操作数src的内容传送给目的操作数dest ,源操作数内容不变。
规定:(1)两个操作数的数据类型须匹配,即要同为8位或16位数据;两个操作数不能同时为段寄存器;也不能同时为存储器操作数。
(2)操作数不能出现二义性,即至少一个操作数需明确类型。
(3)代码段寄存器CS不能作为目的操作数使用,但可以作为源操作数。
(4)立即数不能作为目的操作数使用,也不能直接传送给段寄存器。
(5)指令指针寄存器 IP 即不能作为目的操作数使用,也不能作为源操作数使用。 - 交换指令 XCHG(格式:XCHG dest,src )
功能:将源操作数和目的操作数的内容相互交换。两个操作数类型需匹配。交换不能同时为两个存储器操作数。 - 堆栈操作指令PUSH和POP (PUSH 指令格式:PUSH src )( POP 指令格式:POP dest )
PUSH指令功能:将指令中指定的16位操作数src压入堆栈,该操作数可以是通用寄存器操作数、存储器操作数或者是段寄存器操作数。
POP指令功能:将堆栈栈顶指针SP所指的16位字内容弹出给指令中指定的操作数。POP指令中的操作数可以是通用寄存器,和存储器或段寄存器操作数(CS除外)。
8086堆栈的使用规则:
(1)堆栈的使用要遵循后进先出(LIFO)准则。
(2)堆栈的存取每次必须是一个字(16位),即堆栈指令中的操作数必须是16位。
(3)8086CPU堆栈操作可以使用除立即寻址以外的任何寻址方式。
- 地址传送指令
- 通用数据传送指令 MOV (格式:MOV dest,src )
-
-
-
-
- 取有效地址指令LEA(格式:LEA reg,mem)
功能:将源操作数的有效地址送到指令中指定的寄存器中。源操作数只能是一个存储器操作数,目的操作数只能是一个16位通用寄存器。 - 地址指针装到DS和指定的寄存器指令LDS(格式:LDS reg,mem)
功能:从指令的源操作数所指定的存储单元开始,将连续4个字节存储单元中的第一个内容送入指令中指定的通用寄存器中,而第二字内容送入段寄存器DS中。 - 地址指针装到ES和指定的寄存器指令LES
LES指令的操作与LDS指令基本类似,只是第二个字的内容送往的段寄存器是ES。
- 取有效地址指令LEA(格式:LEA reg,mem)
-
-
-
-
- 标志寄存器传送指令
-
-
-
-
- 读取标志指令LAHF(格式:LAHF)
功能:将标志寄存器的低8位读出后传送给AH寄存器。 - 设置标志寄存器指令SAHF(格式:SAHF
功能:将AH寄存器内容送到标志寄存器的低8位。 - 标志寄存器压栈指令PUSHF(格式:PUSHF)
功能:先执行栈顶指针SP减2操作,然后再将16位标志寄存器的所有标志位送入到SP指向的栈顶字单元中,其操作过程与PUSH指令类似。 - 标志寄存器出栈指令POPF(格式:POPF)
功能:将堆栈栈顶指针所指的一个字内容弹出来送到标志寄存器中,然后再将SP的值加2,其操作过程与POP指令类似。
- 读取标志指令LAHF(格式:LAHF)
-
-
-
-
- 查表转换指令XLAT(格式:XLAT或XLAT 表首地址)
功能:实现将AL中的值变换成内存表格中的对应值。XLAT指令的操作数是隐含的,所执行的操作是将BX中的值为基地址、AL中的值为位移量所形成的偏移地址所对应的字节存储单元中的内容送入AL中,即执行AL←[BX+AL]操作。
- 查表转换指令XLAT(格式:XLAT或XLAT 表首地址)
-
-
- 算术运算类指令
-
-
- 加法指令
-
-
-
-
- 加法指令ADD(格式:ADD dest,src)
功能:将源操作数的内容和目的操作数的内容相加后的结果保存在目的操作数中,并根据结果设置相关标志位。(注意:源操作数和目的操作数应同时为带符号数或无符号数,且两者的数据类型应匹配。) - 带进位的加法指令 ADC(格式: ADC dest,src)
功能:ADC与ADD功能基本相同,唯一不同的是要加上当前进位标志位的值。 - 加 1 指令 INC(格式:INC dest)
功能:将指定操作数的内容加1,再回送给该操作数。
- 加法指令ADD(格式:ADD dest,src)
-
-
-
-
- 减法指令
-
-
-
-
- 减法指令 SUB(格式:SUB dest,src)
功能:将目的操作数内容与源操作数内容相减之后的结果存入目的操作数中。 - 带借位的减法指令 SBB(格式:SBB dest,src)
功能:指令执行时,用目的操作数减去源操作数,还要减去标志位CF的值,并将相减的结果回送给目的操作数。 - 减 1 指令 DEC(格式:DEC dest)
功能:完成对指令中指定的操作数内容减1 后,又回送给该操作数。 - 求补指令 NEG (格式:NEG dest)
功能:对指令中指定的操作数内容求补后,再将结果回送给该操作数。该操作数只能是通用寄存器操作数或存储器操作数。 - 比较指令CMP(格式:CMP dest,src)
功能:CMP指令除了不回送相减结果外,其他与SUB相同。CMP常用于判断两数的大小是否相等。
- 减法指令 SUB(格式:SUB dest,src)
-
-
-
-
- 乘法指令
-
-
-
-
- 无符号数乘法指令 MUL (格式:MUL opr)
功能:将指令中指定的操作数与隐含的被乘数(都为无符号数)相乘。 - 带符号数乘法指令 IMUL
- 无符号数乘法指令 MUL (格式:MUL opr)
-
-
-
-
- 除法指令
-
-
-
-
- 无符号数除法指令 DIV(格式:DIV src)
功能:用指令中的显式操作数去除隐含操作数(都为无符号数)。 - 带符号数除法指令 IDIV
与DIV基本相同,只是要求操作数必须为用补码表示的带符号数。
- 无符号数除法指令 DIV(格式:DIV src)
-
-
-
-
- 符号扩展与符号扩展指令
-
-
-
-
- 符号扩展
对数据位数的扩展具体分为符号扩展和零扩展两种。当要扩展的数据是无符号数时,可采用零扩展,即在最高为前扩展0,补充够位数即可;当要扩展的数据是带符号数时,需采用符号扩展,即在最高位前扩展符号为来补充够位数。(注意:如果要扩展的数是补码形式表示的带符号数,则对其符号位扩展后,结果仍是该数的补码。) - 符号扩展指令
- 符号扩展
-
-
-
-
-
-
- 字节扩展为字指令 CBW(格式:CBW)
功能:该指令的隐含操作数为AH和AL,功能是用AL的符号位去填充AH。 - 字扩展为双字指令 CWD (格式:CWD)
功能:该指令的隐含操作数为DX和AX,功能是用AX的符号位去填充DX。
- 字节扩展为字指令 CBW(格式:CBW)
-
-
-
-
- 逻辑运算和移位类指令
-
-
- 逻辑运算指令
-
-
-
-
- 逻辑与指令 AND(格式:AND dest,src)
功能:将两个操作数的内容进行按位相 “与” 运算,并将结果回送目的操作数。源操作数可以是8/16位通用寄存器、存储器操作数或立即数,而目的操作数只允许是通用寄存器或存储器操作数。注意:段寄存器既不能作为源操作数也不能作为目的操作数,两个操作数不能同时为存储器操作数。 - 逻辑或指令 OR(格式:OR dest,src)
功能:将两个操作数的内容进行按位相“或”运算,并将结果回送目的操作数。指令对源操作数和目的操作数的规定及对标志位的影响同AND指令。 - 逻辑异或指令 XOR(格式:XOR dest,src)
功能:将两个操作数的内容进行按位相“异或”运算,并将结果回送目的操作数。 - 逻辑非指令 NOT(格式:NOT dest)
功能:将操作数的内容按位求反,并将结果回送到目的操作数中,指令中的操作数可以是8/16位的寄存器或存储器操作数,但不能是立即数。 - 测试指令 TEST(格式:TEST dest,src)
功能:TEST指令所完成的操作以及对操作数的约定和对标志位的影响都与AND指令相同,所不同的只是TEST指令不回送结果给目的操作数。
- 逻辑与指令 AND(格式:AND dest,src)
-
-
-
-
- 移位指令
-
-
-
-
- 非循环移位指令
-
-
-
-
-
-
- 逻辑左移指令 SHL(格式:SHL mem/reg,count)
功能:将目的操作数的内容向左移位,移位次数由源操作数count决定,count可以是1或CL。每左移一位,目的操作数的最高位移入CF标志位,最低位补0。 - 逻辑右移指令 SHR
功能:将目的操作数的内容向右移位,每右移一位,操作数的最低位移入CF标志,最高位补0。 - 算术左移指令 SAL
- 算术右移指令 SAR
功能:将目的操作数的内容向右移位,移位次数由源操作数给定,每右移一次,操作数最低位移入CF标志位,最高位在移入次高位的同时其值不变。这样移位后最高位和次高位的值相同,即符号位始终保持不变。
- 逻辑左移指令 SHL(格式:SHL mem/reg,count)
-
-
-
-
-
-
- 循环移位指令
-
-
-
-
-
-
- 循环左移指令 ROL
功能:将目的操作数的内容向左移动源操作数所规定的位数,每移一位,最高位在进入进位位CF的同时,也移入空出的最低位,形成环路。 - 循环右移指令 ROR
功能:将目的操作数的内容向右移动源操作数所规定的位数,每移一位,最低位在进入进位位CF的同时,也移入空出的最高位,形成环路。 - 带进位循环左移指令 RCL
功能:将目的操作数的内容向左移动源操作数所规定的位数,每移一位,最高位在进入标志位CF,而CF原先的状态值移入最低位。 - 带进位序号右移指令 RCR
功能:将目的操作数的内容向右移动源操作数所规定的位数,每移一位,最低位在进入标志位CF,而CF原先的状态值移入最高位。
- 循环左移指令 ROL
-
-
-
-
- 控制转移类指令
-
-
- 无条件转移指令 JMP
-
-
-
-
- 段内直接转移(格式:JMP label)
功能:无条件转移到本段label所指的目标地址处执行,即执行“IP←IP+位移量”操作。指令被汇编时,汇编程序会计算出JMP指令的下一条指令到label所指示的目标地址之间的位移量。 - 段内间接转移(格式:JMP opr)
功能:无条件转移到本段opr所指定的目标去执行程序。opr可为一寄存器或存储器操作数,在其中预防着要转移的目标地址。执行JMP指令时,将opr中取得的偏移地址作为新的指令指针装入到IP中,实现程序转移。 - 段间直接转移(格式:JMP FAR PTR label)
功能:无条件转移到另外一个代码段中标号label所指的目标地址处去执行。指令中的FAR PTR为远转移属性在操作符,表示转移是在段间进行,label为另外一个代码段中目标地址的标号。 - 段间间接转移(格式:JMP DWORD PTR opr)
功能:无条件地转移到另外一个代码段中由操作数所指定的目标地址去执行。指令中的操作数opr只能是一个存储器操作数,涉及连续4个存储单元,通过DWORD PTR明确类型。指令执行时,由opr的寻址方式确定出具体的有效偏移地址,将该偏移地址所指的双字单元中的低字内容送给IP,高字内送给CS,形成新的指令执行地址CS:IP,从而实现段间间接转移。
- 段内直接转移(格式:JMP label)
-
-
-
-
- 条件转移指令(详情见P106)
- 循环控制指令
-
-
-
-
- LOOP label
执行CX←CX-1操作。若CX≠0,则转移到目标地址label处;若CX=0,顺序执行下一条指令。 - LOOPZ/LOOPE label
执行CX←CX-1操作。若CX≠0且ZF=1,则转移到目标地址处;否则顺序执行下一条指令。 - LOOPNZ/LOOPNE label
执行CX←CX-1操作。若CX≠0且ZF=0,则转移到目标地址处;否则顺序执行下一条指令。 - JCXZ label
若CX=0,则转移到目标地址label处;若CX≠0,则顺序执行下一条指令。
- LOOP label
-
-
-
-
- 子程序调用与返回指令
-
-
-
-
- 子程序调用指令 CALL
-
-
-
-
-
-
- 段内直接调用(格式:CALL opr)
指令中的opr为子程序名,代表子程序的入口地址。指令的执行过程为:先保存断点,即将CALL指令的下一条指令的IP值入栈,然后再将opr所表示的偏移地址送IP,转到子程序处去执行指令。 - 段内间接调用(格式:CALL opr)
段内间接调用所执行的操作同段内直接调用,只是这里的opr只能用16位的寄存器或存储器操作数表示,具体对操作数的约定完全同JMP 指令中的段内间接转移形式。 - 段间直接调用(格式:CALL FAR PTR opr)
段间直接调用的子程序名可直接写在指令中,但在其之前必须冠以FAR PTR属性。执行过程是先保存断点,即将CALL指令的下一条指令的CS和IP分别压入堆栈;然后再将opr所表示的子程序的偏移地址送IP,段地址送CS,实现段间调用。 - 段间间接调用(格式:CALL DWORD PTR opr)
段间间接调用要求指令中的操作数opr所表示的子程序地址只能用存储器操作数表示,涉及连续4个存储单元。执行时,将前两个单元的字内容(子程序的偏移地址)送IP,后两个单元的字内容(子程序所在段的段地址)送CS,实现段间调用。
- 段内直接调用(格式:CALL opr)
-
-
-
-
-
-
- 子程序返回指令 RET(格式:RET [n])
功能:执行从堆栈顶部弹出断点,恢复原来的IP(或IP与CS)返回调用处继续往下执行。该指令通常放在子程序的最后。
- 子程序返回指令 RET(格式:RET [n])
-
-
-
-
- 中断调用及返回指令
-
-
-
-
- 中断指令 INT(格式:INT n)
功能:产生一个中断类型号为n的内部中断,其中,n值是一个0~FFH范围内的整数。
INT n 指令的具体执行步骤和操作为:①标志寄存器内容压入堆栈,将标志位IF、TF清零;②将当前的CS和IP值压入堆栈,将中断服务程序的入口地址,方别装入CS和IP。
INT 指令 只影响IF和TF标志位。 - 溢出中断指令 INTO(格式:INTO)
功能:产生一个溢出中断。该指令是INT指令的特例,中断类型号隐含为4(即INT4),只有当某运算结果产生溢出(OF=1)时才产生中断。该指令也只影响标志位IF和TF。 - 中断返回指令 IRET(格式:IRET)
功能:退出中断过程,返回到中断是的断点处继续执行。所有中断程序,不管是由软件引起还是硬件引起,其最后一条指令必须是IRET。执行该指令首先将堆栈中的断点地址弹出到IP和CS,程序返回到原断点处,然后接着将INT指令执行时压入到堆栈的 标志字内容弹出到标志寄存器以恢复中断前的标志状态。
- 中断指令 INT(格式:INT n)
-
-
-
- 串操作类指令
-
-
- 串传送指令 MOVS(格式:MOVS dest,src (一般格式) MOVSB(字节格式) MOVSW(字格式))
格式:将DS:SI所指的源串中的一个字节或字,传送到由ES:DI所指的目的串中,同时根据方向标志位DF的值自动修改SI和DI的值。 - 读字符串指令 LODS(格式:LODS src(一般格式) LODSB(字节格式) LODSW(字格式))
功能:将DS:SI指定的源串中的一个字节或字内容送到累加器AL或AX中,同时相应修改SI值。该指令不影响标志位。 - 写字符串指令 STOS(格式:STOS dest STOSB STOSW)
功能:把AL或AX中的值送至ES:DI所指的字节或字存储单元中,同时修改地址指针DI。指令不影响任何标志位。 - 串比较指令 CMPS(格式:CMPS src,dest CMPSB CMPSW)
功能:将由DS:SI所指的源串中的一个字节或字减去由ES:DI所指的目的串中的一个字节或字,相减结果不回送目的操作数,仅反映在状态标志位上,同时修改SI和DI值。该指令对6个状态标志位都有影响。 - 串搜索指令 SCAS(格式:SCAS dest SCASB SCASW)
功能:将AL或AX中的内容减去由DI指定的目的串中字节或字内容,根据相减结果影响标志位,但不保存结果,同时修改DI - 重复前缀
- 串传送指令 MOVS(格式:MOVS dest,src (一般格式) MOVSB(字节格式) MOVSW(字格式))
-
-
-
-
- REP(格式:REP S_ins)
指令中的S_ins表示一具体串指令。指令的功能是当CX≠0时,REP后的串指令被重复执行。具体操作过程如下:
(1)首先判断CX是否为0,若CX=0,则退出REP操作,否则重复执行串指令;
(2)根据DF标志位修改地址指针
(3)将CX减1后再回送CX
(4)重复(1)~(3)
REP指令常用作MOVS、STOS指令的前缀 - REPZ/REPE(格式:REPZ/REPE S_ins)
功能:当CX≠0且ZF=1时,重复执行其后紧跟的串操作指令S_ins。该指令的操作过程同REP,所不同的只是判断条件中,重复串指令操作的次数不仅与CX有关,还与ZF有关。REPZ后面常跟CMPS、SCAS串指令。 - REPNZ/REPNE (格式:REPNZ/REPNE S_ins)
功能:当CX≠0且ZF=0时,重复执行其后的串操作指令S_ins。该指令也常用作CMPS、SCAS指令的前缀。
- REP(格式:REP S_ins)
-
-
-
- 处理器控制类指令(详情见P117)