微机原理及接口技术-第4章-指令系统

第4章8086instructionsystem本章主要教学内容1 8086指令的基本格式2 8086指令系统的寻址方式3 8086指令的应用本章教学目的使学生掌握指令的寻址方式过程 掌握指令的应用 教学重点 指令系统的寻址方式和指令的应用教学难点 指令的寻址方式 第4章8086InstructionSystem 4 1指令的基本概念和基本格式4 2指令的寻址方式4 38086指令系统4 4中断调用类指令 4 1DefinitionandatofInstruction Machineinstruction 指挥计算机完成某种操作的命令 at OperationCode OPD OPS 0 1 2 OPD 目的操作数OPS 源操作数 4 2InstructionAddressing 4 2 1寻址方式的基本概念4 2 2与数据有关的寻址方式4 2 3I O端口寻址方式 4 2 1DefinitionofAddressing AddressingApproach 指令中操作数字段实质上是指出操作数存放于何处 一般来说 操作数可以跟随在指令操作码之后 称为立即数 immediatue 操作数也可以存放在CPU内部的寄存器中 称为寄存器操作数 绝大多数的操作数存放在内存储器中 称为存储器操作数 指令指定操作数的位置 即给出地址信息 在执行时需要根据这个地址信息找到需要的操作数 这种寻找操作数的过程称为寻址 而寻找操作数的方法称为寻址方式 4 2 2relatedtodata 1 立即寻址 immediateaddressing 立即寻址方式中 指令操作码和操作数都在存储器代码段中 汇编格式 n n为立即操作数 是用8位或16位二进制补码表示的有符号数 功能 操作数存放在存储器 指令下一单元的内容为立即操作数n 图形表示如右 例4 1 例2 5 MOVAX 2A50H执行后 AX 该例中源操作数为立即寻址方式 立即数为2A50H 存放在指令的下一单元 执行 2A50H AX执行后 AX 2A50HHOWarrangeitinAX AXcanbeAL ormemoryIVcannotbeOPDbutonlyOPS 2 RegisterAddressing 寄存器寻址方式的操作数在指令指明的寄存器中 汇编格式 R其中R表示寄存器名 功能 操作数直接存放在寄存器R中 图形表示 R指令 操作数 例4 2 下列程序执行后 AX 1234H BX 5678HMOVAX BXAX BX HOWABOUTMOVAL BHMOVAH BXMOVAX BLKeptsamelength 3 MemoryAddressing 如果操作码所需操作数存放在内存储器中 则指令中需要给出操作数的地址信息 为了提高程序的灵活性 8086指令系统提供了多种存储器寻址方式 1 直接寻址 2 寄存器间接寻址 3 寄存器相对寻址 4 基址变址寻址 5 关于段跨跃前缀 1 直接寻址 directaddressing 汇编格式 含有变量的地址表达式 寄存器名 EA bedirectlygiven DefaultDSorX EA 功能 指令下一字单元的内容是操作数的偏移地址EA 图形表示 例4 3 例4 3 寄存器和存储器内容为 AX 1212H BUF为数据段定义的变量 其偏移地址是2000H DS 3000H 32000H 4545H 执行指令 MOVAX BUF执行后 AX 图形表示 执行 32000H AX执行后 AX 4545H 指令操作例 MOVAX 3102H AL 3102H AH 3103H 如果 DS 2000H 23012H CDH 23013H ABH则操作数的物理地址为 20000H 3102H 23102H指令执行后 AX ABCDH MOV操作码 02H 31H AH AL 23102H CDH ABH 存储器 代码段 数据段 立即数 操作码 低8位 高8位 存储器 MOV操作码 02H 31H AH AL 代码段 代码段 立即寻址指令在存储器中的存放形式 AX 指令操作例 MOVAX 3102H AX3102H执行后 AH 31H AL 02H 2 寄存器间接寻址 registerindirectaddressing 寄存器间接寻址方式中 寄存器的内容为操作数的偏移地址EA 操作数在存储器中 汇编格式 R 功能 操作数存放在存储器 寄存器R存放操作数的偏移地址EA Donotforgetbracket 寄存器间接寻址示意图 例如 MOVAX BX 若 DS 2000H BX 1000H 物理地址 20000H 1000H 21000H 指令执行前 AX 2030H 21000H 0A0H 21001H 50H 指令执行后 AX 50A0H 21000H 0A0H 21001H 50H 指令执行情况如下 偏移地址EA计算方法如下 EA SI SI作间址寄存器 DS DI DI作间址寄存器 DS BX BX作间址寄存器 DS BP BP作间址寄存器 SS 执行指令 MOVAX BP 执行后 AX BP SS 20030H 图形表示如下 例4 4 寄存器和存储器内容分别为 AX 0 BP 0030H SS 2000H 20030H 1234H 3 寄存器相对寻址 registerrelativeaddressing 寄存器相对寻址方式是在指令中给定一个基址寄存器 或变址寄存器 名和一个8位或16位的相对偏移量 displacement 两者之和作为操作数的有效地址 对BX SI DI这三个间址寄存器 指示的是数据段中的数据 而用BP作间址寄存器 则指示的是堆栈段中的数据 汇编格式 X R X表示位移量 是8位或16位二进制补码表示的有符号数 功能 操作数存放在存储器 寄存器R的内容加位移量X为操作数的偏移地址EA 偏移地址EA计算方法如下 例4 5 设执行前 AX 0040H BX 0030H DS 2000H 20036H 0050H执行指令 MOVAX 6 BX 执行后 AX BX DS 20036H Difference 4 基址变址寻址 basedinddaddressing 基址变址寻址方式是在指令中给出一个基址寄存器名和一个变址寄存器名 两者内容之和作为操作数的有效地址 基址寄存器为BX或BP 变址寄存器为SI或DI 但指令中不能同时出现两个基址寄存器或两个变址寄存器 如果基址寄存器为BX 则段寄存器使用DS 如果基址寄存器用BP 则段寄存器用SS 汇编格式 BR IR 功能 操作数存放在存储器 BR的内容加IR的内容是操作数的偏移地址EA 操作数偏移地址EA计算方法如下 例4 6 例如MOVAL BX SI MOVAL BX SI 若指令执行前 DS 1000H BX 0010H SI 0002H 10012H 45H则EA BX SI 0012H PA DS 10H EA 10012H指令执行后 AL 45H 相对基址变址寻址 relativebasedinddaddressing 汇编格式 X BR IR 功能 操作数存放在存储器 BR的内容加IR的内容加位移量X是操作数的偏移地址EA 例 例如MOVAL 21H BX SI MOVAL 21H BX SI 若指令执行前 DS 1000H BX 0010H SI 0002H 10033H 45H则EA 21H BX SI 0033H PA DS 10H EA 10033H指令执行后 AL 45H 5 跨段问题 按前述规定 若选用BP作间址基址寄存器 变址寄存器或基址寄存器 则操作数在堆栈段 操作数的物理地址PA由堆栈段寄存器SS的内容左移4位与偏移地址EA相加后形成 否则 操作数在数据段 操作数的物理地址PA由数据段寄存器DS的内容左移4位与偏移EA相加后形成 该规定为系统默认状态 当要否定默认状态 到非约定段寻找操作数时 必须用跨段前缀指明操作数的段寄存器名 汇编格式 段寄存器名 操作数地址 功能 段寄存器名指明操作数属哪个段 例4 7 跨段前缀示例 MOVAX DS BP MOVCX SS SI 该例中 DS SS 均为跨段前缀 此时默认状态无效 操作数的物理地址PA由段寄存器内容左移4位加偏移EA形成 上述2条指令的源操作数物理地址分别为 PA1 DS 左移4位 BP PA2 SS 左移4位 SI 4 2 3I O端口寻址方式I Ointerfaceaddressing 8086CPU采用独立编址的I O端口 可以最多访问64K个字节端口或32K个字端口 用专门的IN指令和OUT指令访问 I O端口寻址只用于这两种指令中 寻址方式有如下两种 1 直接端口寻址在指令中直接给出端口地址 端口地址一般采用2位十六进制数 也可以用符号表示 这种寻址方式为直接端口寻址 因此 直接端口寻址可访问的端口数为0 255个 例如 INAL 25H2 寄存器间接端口寻址如果访问的端口地址值大于255 则必须用I O端口的间接寻址方式 所谓间接寻址 是指把I O端口的地址先送到DX中 用DX作间接寻址寄存器 而且只能用DX寄存器 例如 MOVDX 378HINAL DX 计算机原理与汇编语言程序设计实验指导书李志民编著中南大学信息科学与工程学院自动化所 指令的机器码 machinecode 表示方法 一 机器语言指令的编码目的和特点1 机器语言指令汇编语言经过汇编机器语言流程序程序程序用符号指令编写的程序相当于解释用二进制表示如 CLC 1111 1000WAIT 1001 1011 MOD 二 机器语言指令代码的编制1 编码格式说明 以寄存器之间或寄存器与存储器之间数据传送的MOV指令为例 151098765320D15 D10位 6为操作码 规定说明指令的功能 D9位 D位 规定数据的传送方向 direction D 1 数据传送到寄存器 或存储器 D 0 数据从寄存器 或M单元 传出 R M REG 100010DW 操作码 典型的MOV指令的编码格式 D8位 W位 规定数据类型W 1 数据为一个字W 0 数据是一个字节D5D4D3位 REG位 寄存器编码 REG W 1字 W 0字节 AXAL BXBL CXCL DXDL SPAH BPCH SIDH 000 011 001 010 100 111 101 110 REG 段寄存器 00CS 11DS 00ES 10SS 8086寄存器编码表 由于MOV指令有两个操作数 一个必为寄存器 由REG确定 另一个可能是寄存器 可能是存储单元 由MOD和R M编码确定 MOD和R M的编码 MOD R M 000110 11 W 0W 1 000 BX SI BX SI D8 BX SI D16ALAX 001 BX DI BX DI D8 BX DI D16CLCX 010 BP SI BP SI D8 BP SI D16DLDX 011 BP DI BP DI D8 BP DI D16BLBX 101 DI DI D8 DI D16CHBP 110D16 直接地址 BP D8 BP D16DHSI 100 SI SI D8 SI D16AHSP 111 BX BX D8 BX D16BHDI Example MOVSP BX100010DWMODREGR MW 1D 1MOD 11REG 100R M 0111000101111100011W 1D 0MOD 11REG 011R M 1001000100111011100 4 38086instructionsystem 包括数据传送类指令 算术运算类指令 位操作类指令 串操作类指令 控制转移类指令 处理机控制类指令 后几节将分别介绍这些指令的语句格式和功能 4 3 1数据传送类指令4 3 2算术运算类指令4 3 3逻辑运算与移位类指令4 3 4串操作类指令4 3 5控制转移类指令4 3 6处理器控制指令 4 3 1数据传送类指令 1通用数据传送指