




已阅读5页,还剩85页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2020年1月25日1 西安邮电学院计算机系系统结构教研室2009 8 微机原理与汇编语言 教材及参考书 微型计算机原理 王忠民王钰王晓婕编著 微型计算机原理 学习与实验指导王钰王劲松刑高峰编著 2020年1月25日2 第4章80 x86指令系统 主要内容 8086 8088指令格式8086 8088指令系统的寻址方式8086 8088指令系统80 x8 Pentium指令系统 2020年1月25日3 1 18086 8088指令系统计算机是通过执行指令序列来完成用户的特定任务的 因此每种计算机都有一组指令集供用户使用 这组指令集就称为计算机的指令系统 指令系统中的每一条指令都对应着微处理器要完成的一种规定的操作 这在设计微处理器时就事先规定好了 所以指令系统是表征一台计算机性能的重要因素 它的格式与规模将直接影响到机器的硬件结构 指令系统是程序员编写程序的基础 因此很好地掌握指令系统的有关知识是后续进一步学习的关键 2020年1月25日4 4 1 18086 8088指令编码格式通常在指令格式中包含操作码和操作数两大部分 其中 操作码表示计算机执行什么操作 操作数指明参与操作的对象 或规定操作对象的地址 即操作对象的存放位置 如何寻找操作数 即操作对象 这就是指令的寻址方式 它是由指令编码格式指出的 2020年1月25日5 8086 8088指令系统采用变字长的指令编码格式 其指令可由1 6个字节组成 它包括操作码 第一字节 寻址方式 第二字节 位移量 立即数 第三到第六字节 三部分组成 其中 寻址方式 位移量 立即数为操作数部分 2020年1月25日6 opcode opcode Mod字节 opcode Mod字节 opcode Mod字节 opcode Mod字节 opcode Mod字节 Data disp disp 低 Data disp 低 Data disp 高 disp 高 disp 低 disp 高 Data Data 低 Data 高 操作码部分 操作数部分 一字节指令 二字节指令 三字节指令 四字节指令 五字节指令 2020年1月25日7 双操作数指令中各字段定义 2020年1月25日8 例4 1写出下面指令的机器语言编码 MOV BX DI 6 CL 指令码为 88H 49H FAH OPCODEDW mod r m reg disp8 100010 01 001 001 0 0 11111010 例4 2写出下面指令的机器语言编码 ADDAX BX DI 0826 03H81H26H08H 2020年1月25日9 4 1 28086 8088指令系统的寻址方式所谓寻址方式就是寻找操作数存放地址 位置 的方法 在8086 8088系统中操作数存放的位置有以下4种 操作数包含在指令字节中 即指令格式中操作数部分就是操作数本身 这种操作数叫立即数操作数 操作数存放在CPU的某个内部寄存器中 这种操作数叫寄存器操作数 操作数在内存的数据区中 这种操作数叫存储器操作数 2020年1月25日10 操作数来自或送到I O端口 这种操作数叫I O操作数 在8086 8088系统中 操作数又可分为两大类 数据操作数和地址操作数 因此 寻址方式也分为数据寻址方式和地址寻址方式两大类 1 数据的寻址方式对于数据操作数 有四种形式 无操作数 单操作数 可以是源操作数 也可以是目的操作数 2020年1月25日11 双操作数 一个是源操作数 一个是目的操作数 隐含操作数 可能隐含一个操作数 源或目的 也可能隐含两个操作数 源操作数 在操作过程中其值不变的操作数 可以提供数据的操作数 目的操作数 在操作后可被操作结果代替的操作数 可以接收数据的操作数 1 立即数寻址方式例如 MOVAL 80HMOVAX 1234H 2020年1月25日12 MOVAL 80H MOVAX 1234H 2020年1月25日13 2 寄存器寻址方式例如 INCCXMOVAX CX 89 C1 程序存储器 AX CX 指令码 包括操作数 2020年1月25日14 3 存储器寻址方式存储器寻址方式的操作数存放在存储器单元中 因此 要存取操作数就必须知道其存储器的单元地址 在指令中可以直接给出或间接给出操作数的地址 以达到存取操作数的目的 指令中给出的地址只是操作数的有效地址 EA 并且是放在方括号 中 若要从存储器中存取操作数还须得到实际的地址 物理地址 物理地址 段地址左移四位 有效地址 物理地址 CSDSSSES 10H EA 2020年1月25日15 有效地址可以由以下三种地址分量组成 位移量 它是存放在指令中的一个8位或16位的带符号数 基址 它是存放在基址寄存器BX或BP中的内容 变址 它是存放在变址寄存器SI或DI中的内容 对于某条具体指令 这三个地址分量可有不同的组合 正是因为这三种地址分量有不同的组合 才使得对存储器操作数的寻址产生了若干种不同的方式 2020年1月25日16 直接寻址方式MOVAL 1064H 1064H EA 16位disp 2020年1月25日17 寄存器间接寻址MOVAX SI MOV BX AL SI 2000H BX 1000H MOVAX SI MOV BX AL 2020年1月25日18 寄存器相对寻址 MOVCL BX 1064H 2020年1月25日19 基址加变址寻址方式MOVAH BP SI BP 2000H SI 1200H 2020年1月25日20 基址加变址相对寻址MOV BX DI 1234H AH BX 0200H DI 0010H 2020年1月25日21 4 I O端口寻址方式 直接端口寻址方式INAL 21H 2020年1月25日22 间接端口寻址方式OUTDX AL 2020年1月25日23 2 地址的寻址方式地址的寻址方式其时是程序转移地址的寻址方式 也就是找出程序转移的地址号 而不是操作数 转移地址可以在段内 称段内转移 也可以跨段 称段间转移 寻求转移地址的方法有以下四种 1 段内直接寻址转移的地址是当前IP内容和指令规定的8位或16位位移量之和 当位移量是8位时 称为短程转移 位移量是16位时称为近程转移 2020年1月25日24 这种寻址方式适用于条件转移或无条件转移类指令 但条件转移只有8位位移量的短程转移 当前IP EA 有效转移地址 opcode 位移量 PM CS 10H EA 位移量 2020年1月25日25 例 JMPSHORTALPHA本例指令是一无条件转移指令 指令采用了段内直接寻址方式 符号地址ALPHA代表位移量 设ALPHA 20H 开始执行该指令时 CS 1500H IP 3200H 于是该指令在存储器中的起始地址为 15000H 3200H 18200H OP 20H 存储器 15000H 18200H 18201H 18202H 18222H 20H 当前代码段首地址 JMPSHORTALPHA 转移地址 而转移有效地址为 EA 当前 IP ALPHA 3202H 20H 3222H转移物理地址为 PA 15000H 3222H 18222H执行完这条指令后 IP的内容变成3222H 不再是3202H CPU将转移到存储单元地址18222H中去取指令来执行 2020年1月25日26 2 段内间接寻址方式程序转移的地址存放在寄存器或存储器单元中 指令执行使用寄存器或存储器单元的内容来更新IP的内容 例如 JMPBXJMPWORDPTRADDRJMPWORDPTR BX ARRY 2020年1月25日27 例 JMPWORDPTRBETA本指令是无条件转移指令 可使程序转移到根据BETA指示的内存单元中取出的偏移地址开始执行指令 指令采用的是段内间接寻址方式 指令的操作数地址是一个符号地址BETA 所以可用数据寻址方式中的直接寻址方式得到存储转移偏移地址的内存单元地址 设当前 CS 0120H IP 2400H BETA 0100H DS 2000H 20100H 00H 20101H 27H 则存储转移偏移地址的内存单元地址为 DS 左移4位 BETA 20000H 0100H 20100H又 20100H 00H 20101H 27H 即转移物理地址为 PA 01200H 2700H 03900H执行完这条指令后 IP的内容变成2700H CPU将转移到存储单元03900H去执行程序 OP OP 00H 存储器 01200 03600 03601 03602 03900 当前代码段首址 JMPWORDPTRBETA 转移地址 00H 27H 01H 20000 20100 20101 数据区首地址 03603 2700H IP 2020年1月25日28 3 段间直接寻址方式这种寻址方式是指令码中直接给出16位的段地址和16位的偏移地址用来更新当前的CS和IP内容 2020年1月25日29 例 JMPFARPTRGAMMA本例指令为无条件转移指令 采用段间直接寻址方式 设当前 CS 2000H IP 1000HGAMMA 3000 4000则本指令的起始地址为 20000H 1000H 21000H转移物理地址为 PA 30000H 4000H 34000H执行完这条指令后 CS的内容变成3000H IP的内容变成4000H 从而程序转移到存储单元34000H开始执行 2020年1月25日30 4 段间间接寻址方式这种寻址方式是由指令码的寻址方式字节求出存放转移地址的连续两个字的地址 其低位字地址单元中存放的是偏移地址 高位字地址单元中存放的是转移段地址 2020年1月25日31 例 JMPDWORDPTRDELTA BX 本例指令是无条件转移指令 采用段间间接寻址方式 设当前 CS 1000H IP 0100H DS 2000H BX 3000H DELTA 0040H 23040H 00H 23041H 50H 23042H 00H 23043H 30H 则间接存储地址按寄存器相对寻址为 DS 左移4位 BX DELTA 20000H 3000H 0040H 23040H于是 可得转移地址为 3000H 5000H即转移物理地址为 PA 30000H 5000H 35000H执行本指令后 CS的内容和IP的内容分别变成3000H和5000H 程序转移到存储单元35000H开始执行 2020年1月25日32 指令执行前 CS 1000H IP 0100H DS 2000H BX 3000HDELTA 0040H指令执行后 CS 3000H IP 5000H 2020年1月25日33 段间间接寻址方式 段间直接寻址方式 段间直接和间接寻址的区别 2020年1月25日34 4 1 38086 8088指令系统8086 8088指令系统大致可分为六大类指令 数据传送类指令 算术运算类指令 位操作类指令 串操作类指令 程序控制类指令 处理器控制类指令学习指令系统着重要掌握指令的基本操作功能 合法的寻址方式及其对状态标志位的影响 2020年1月25日35 1 数据传送类指令数据传送指令的主要功能是传送数据 地址和标志 可分为通用数据传送指令 输入输出指令 地址传送指令和标志传送指令 1 通用数据传送指令通用数据传送指令可完成字节或字数据的传送 它可分为数据传送指令 堆栈操作指令 数据交换指令和字节转换指令 1 数据传送指令指令格式 MOVdst src dst src src表示源操作数 字 字节 立即数操作数寄存器操作数 包括段寄存器 存储器操作数 dst表示目的操作数 字 字节 寄存器操作数 不包括IP CS段寄存器 存储器操作数 2020年1月25日36 段寄存器CSDSSSES 存储器 通用存储器AXBXCXDXBPSPSIDIALBLCLDLAHBHCHDH MOV指令数据传送方向 16位 8 16位 8 16位 16位 8 16位 指令功能 将源操作数传送 复制 到目的操作数 传送方向 如下图所示 立即数 2020年1月25日37 2 堆栈操作指令堆栈操作指令是用来完成压入和弹出堆栈操作的 8086 8088指令系统中提供了完成这两种操作的相应指令 压入堆栈指令指令格式及操作 PUSHsrc SP SP 2 SP 1 SP src src表示源操作数 字 寄存器操作数 包括段寄存器 存储器操作数 2020年1月25日38 注意 堆栈指令的操作数只能是字操作数 即16位操作数 且不能是立即数 进栈操作 PUSH 先移后进出栈操作 POP 先出后移 弹出堆栈指令指令格式及操作 POPdst dst SP 1 SP SP SP 2 dst表示目的操作数 字 寄存器操作数 不包括IP CS段寄存器 存储器操作数 2020年1月25日39 3 交换指令指令格式及操作 XCHGopr1 opr2 opr1 opr2 注意 交换指令的两个操作数可以是寄存器操作数 存储器操作数 但都不能是立即数操作数 也不能同时为存储器操作数 寄存器操作数是指通用寄存器 不包括段寄存器 也就是说 交换指令是完成寄存器与寄存器 寄存器与存储器之间的数据互换功能 交换的两个数据可以是8位的 也可以是16位的 2020年1月25日40 4 字节转换指令指令格式及操作 XLATsrc table AL BX AL XLAT指令是用来将一种字节代码转换成另一种字节代码 即将BX的内容 代码表格首址src table 和AL的内容 表格偏移量 相加作为有效地址 并从中读出此内存表格地址单元的内容传送到AL累加器中 XLAT指令还可以有以下几种表示形式 XLAT 不写操作数XLATB 有B就不允许再写操作数 XLATES src table 重设段寄存器为ES 2020年1月25日41 例 在内存的数据段有一张16进制数的ASCII码表 其首地址为Hex table 如下图所示 为欲将十六进制数0AH转换成ASCII码 则可用以下几条指令实现 MOVBX OFFSETHex tale BX 表首址MOVAL 0AH AL 十六进制数AXLATHex table 查表转换 BX 1000H AX 000AH Hex table 2020年1月25日42 2 输入 输出指令输入输出指令可以分为两大类 一类是直接端口地址的输入 输出指令 一类是通过DX寄存器间接端口地址的输入 输出指令 1 输入指令 直接寻址的输入指令指令格式及操作 INacc port acc port 其中 acc为8位或16位累加器AL AX port为8位端口地址 故可寻址256个端口 2020年1月25日43 间接寻址的输入指令指令格式及操作 INacc DX acc DX 其中 acc为8位或16位累加器AL AX DX为16位间接寻址的端口地址寄存器 故可寻址64K个端口 2 输出指令 直接寻址的输出指令指令格式及操作 OUTport acc port acc 2020年1月25日44 间接寻址的输出指令指令格式及操作 OUTDX acc DX acc 2020年1月25日45 3 地址传送指令1 取有效地址指令指令格式 LEAreg16 mem此指令的功能是将存放源操作数的16位偏移地址 即有效地址EA 送到一个16位的通用寄存器中 即源操作数必须是一个存储器操作数 目的操作数必须是一个寄存器操作数 例如 LEABX bufferLEAAX BP DI LEADX bety BX SI 2020年1月25日46 注意LEA指令和MOV指令的异同 比较下面两组指令 不同 LEABX buffer 将存储器buffer的偏移地址送到BXMOVBX buffer 将存储器buffer的内容传送到BX相同 LEABX bufferMOVBX OFFSETbuffer以上两条指令都是将存储器buffer的偏移地址送到BX 其中OFFSETbuffer表示存储器偏移地址 2020年1月25日47 2 地址指针装入DS指令指令格式 LDSreg16 mem32此指令的功能是将源操作数所对应的双字长的内存单元中的高字内容 一般为16位段基址 送入DS 低字内容 一般为偏移地址 送入指令所指定的寄存器中 例如 LDSDI 2130H 2020年1月25日48 3 地址指针装入ES指令指令格式 LESreg16 mem32此指令的功能是将源操作数所对应的双字长的内存单元中的高字内容 一般为16位段基址 送入ES 低字内容 一般为偏移地址 送入指令所指定的寄存器中 例如 LESDI 2130H 2020年1月25日49 4 标志传送指令1 取标志指令指令格式 LAHF2 置标志指令指令格式 SAHF OF DF IF TF SF ZF AF PF CF FLAG AH LAHF和SAHF指令操作示意图 2020年1月25日50 3 标志压入堆栈指令指令格式及操作 PUSHF SP SP 2 SP 1 SP FLAG 4 标志弹出堆栈指令指令格式及操作 POPF FLAG SP 1 SP SP SP 2 2020年1月25日51 在使用这些传送类指令时应注意以下几点 目的操作数不能为立即数 目的操作数为段寄存器 CS不能作为目的操作数 源操作数不能为立即数 源操作数为非立即数时 两操作数之一必须为寄存器操作数 操作数类型必须一致 用BX SI DI来间接寻址时 默认的段寄存器为DS 用BP来间接寻址时 默认的段寄存器为SS 2020年1月25日52 对于堆栈操作 源操作数不能为立即数 CS寄存器的值可以压入堆栈 但反之则不允许 数据交换指令的两个操作数任一都不能是立即数 换码指令的操作数是一种特殊的基址变址寻址方式 基址寄存器为BX 变址寄存器为AL 除了SAHF和POPF指令外 其余指令都不会影响标志 2020年1月25日53 2 算术运算类指令 8086 8088有丰富的算术运算指令 而且可以处理4种类型的数据 如下表所示 2020年1月25日54 1 加法指令 在微处理器中 没有专用的BCD码运算指令 使用二进制运算指令进行BCD码数的运算 然后用BCD码运算调整指令进行调整 重新得到BCD码的结果 2020年1月25日55 AAA指令的操作为 非压缩型BCD码调整 如果 AL 0FH 9或 AF 1则 AL AL 06H AH AH 1 AF 1 CF AF AL AL 0FH 否则 AL AL 0FH DAA指令的操作为 压缩型BCD码调整 如果 AL 0FH 9 AF 1则 AL AL 06H AF 1如果 AL 9FH或 CF 1则 AL AL 60H CF 1 2020年1月25日56 例 要求计算两个十进制数之和 7 8 可用以下指令实现 非压缩型BCD码调整 MOVAX 0007H AL 07H AH 00HMOVBL 08H BL 08HADDAL BL AL 0FHAAA AL 05H AH 01H CF AF 1 压缩型BCD码调整 MOVAX 0007H AL 07H AH 00HMOVBL 08H BL 08HADDAL BL AL 0FHDAA AL 15H AH 00H CF 0 AF 1 2020年1月25日57 例 要求计算两个十进制数之和 56 34 可用以下指令实现 压缩型BCD码调整 MOVAX 3456H AL 56H AH 34HADDAL AH AL 8AHDAA AL 90H 例 要求计算两个BCD数的ASCII码之和 即 5 9 可用以下指令实现 ASCII码调整 MOVAL 5 AL 35HADDAL 9 39H AL 6EHMOVAH 0 AH 00HAAA AH 01H AL 04HORAX 3030H AX 3134H 即 34 2020年1月25日58 2 减法指令 2020年1月25日59 AAS指令的操作为 非压缩型BCD码调整 如果 AL 0FH 9或 AF 1则 AL AL 06H AH AH 1 AF 1 CF AF AL AL 0FH 否则 AL AL 0FH DAS指令的操作为 压缩型BCD码调整 如果 AL 0FH 9 AF 1则 AL AL 06H AF 1如果 AL 9FH或 CF 1则 AL AL 60H CF 1 2020年1月25日60 例 要求计算两个十进制数之差 86 7 可用以下指令实现 非压缩型BCD码 MOVAX 0806H AH 08H AL 06HSUBAL 07H AX 08FFHAAS AX 0709H 例 要求计算两个十进制数之差 134 56 可用以下指令实现 压缩型BCD码 MOVAX 5634H AH 56H AL 34HSUBAL AH AL DEH 有借位DAS AL 78H 2020年1月25日61 3 乘法指令 AL 源操作数 AL AH AX 源操作数 AX DX 2020年1月25日62 AAM指令的操作为 将二进制数转换成十进制数 AH AL 0AH的商 即AL除以10 商送AH AL AL 0AH的余 即AL除以10 余数送AL例 要求进行以下十进制乘法运算 7 9 解 可编程序段如下 MOVAL 07H AL 07HMOVBL 09H BL 09HMULBL AX 07H 09H 003FHAAM AH 06H AL 03H 2020年1月25日63 4 除法指令 2020年1月25日64 8086 8088CPU执行除法时规定 除数只能是被出数的一半字长 当被除数为16位时 除数应为8位 当被除数为32位时 除数应为16位 AL 源操作数 AX AH AX AX 源操作数 DX DX 商 商 余数 余数 8位 16位 16位 32位 除数 除数 被除数 被除数 2020年1月25日65 AAD指令的操作为 十进制数转换成二进制数 AL AH 0AH AL AH 0例 要进行以下十进制除法运算 73 2 解 可编程序段如下 MOVAH 07H AH 07HMOVAL 03H AL 03HMOVBL 02H BL 02HAAD AL 49H 即十进制数73 DIVBL AL 24H 商 AH 01H 余数 AAM AH 03H AL 06H 2020年1月25日66 3 位操作类指令位操作指令是对8位或16位的寄存器或存储单元中的内容按位进行操作 这一类指令包括逻辑运算指令 移位指令和循环移位指令等三组 1 逻辑运算指令逻辑运算类指令与算术运算指令不同 算术指令是按字节或字进行算术运算 而逻辑运算指令是把操作数按位来进行逻辑运算 2020年1月25日67 说明 TEST相当于AND运算 但是不保存结果 仅影响标志 2020年1月25日68 常见的用法举例 清进位标志位 ANDAX AX或ORAL AL等 清零操作数 XORAX AX不仅把AX清零 而且也影响了状态标志 把某几位取反 用XOR指令 把要取反的位和1异或 不变的位和0异或 清零或置位某几位 用AND指令清零 用OR指令置位 2020年1月25日69 2 移位操作指令该类指令的使用方法是 移动1位 用类似于SHLAX 1的格式 移动n位 用类似于SHLAX CL的格式 CF dst CF 0 dst CF 0 dst CF 0 dst 2020年1月25日70 说明 逻辑移位适用于无符号数 算术移位适用于有符号数 逻辑左移和算术左移的机器码完全相同 是助记符的两种写法 2020年1月25日71 说明 循环移位常用来变换数据格式 CF dst CF dst CF dst CF dst 2020年1月25日72 使用举例 例一 利用循环移位指令可以对寄存器或存储器中的任一位进行测试 如要测试AL寄存器中的第5位的状态是 0 还是 1 则可利用以下指令实现 MOVCL 5 CL 移位次数RORAL CL CF AL的第5位JNCZERO 若 CF 0 转ZARO 否则 ZERO 2020年1月25日73 例二 利用带进位循环移位指令可以实现将两个以上寄存器或存储器单元组合起来一起移位 如DX和AX两个寄存器组成的32位数乘以2 可用以下两条指令实现 SHLAX 1 AX左移1位 CF AX的最高位RCLDX 1 DX带进位左移1位 DX的最低位 CF 具体操作如下图 CF DX AX 0 RCLDX 1 SHLAX 1 2020年1月25日74 4 串操作指令串操作指令的特征是对数据块 也称数据串 字符串或数值串 进行操作 其操作数为隐含操作数 并且其中部分指令的两个操作数可以同时是存储器操作数 串传送MOVS Movestring 串比较CMPS Comparestring 串扫描SCAS Scanstring 串装入LODS Loadfromstring 串保存STOS Storeintostring 2020年1月25日75
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 校园网络设备故障处理指南报告
- 钒铁熔化还原工知识考核试卷及答案
- 夹具钳工抗压考核试卷及答案
- 废纸制浆工上岗考核试卷及答案
- 油气管道维护工专业技能考核试卷及答案
- 建筑施工安全操作规程与风险管控
- 海底隧道物资存储策略分析报告
- 学法减分考试题库及答案广东
- 电气安装工程安全技术标准
- 法务管理员考试题及答案
- 校长讲法治课课件
- 2025至2030中国工业云平台行业发展研究与产业战略规划分析评估报告
- 2025餐饮合伙经营合同协议书
- 履约保函标准文本与应用示例
- 五年级数学口算训练题库及解题技巧
- 催化原理教学课件
- 2025下半年新疆生产建设兵团事业单位招聘(2398人)考试参考试题及答案解析
- 经桡动脉脑血管造影护理课件
- 2025年海南省公务员录用考试《行测》真题及答案解析(记忆版)
- 2025年湖北省公务员公开遴选笔试试题及答案(综合类)
- 抗过敏药物合理应用专家共识(2025版)解读
评论
0/150
提交评论