




已阅读5页,还剩155页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章8086instructionsystem本章主要教学内容1 8086指令的基本格式2 8086指令系统的寻址方式3 8086指令的应用本章教学目的使学生掌握指令的寻址方式过程 掌握指令的应用 教学重点 指令系统的寻址方式和指令的应用教学难点 指令的寻址方式 第4章8086InstructionSystem 4 1指令的基本概念和基本格式4 2指令的寻址方式4 38086指令系统4 4中断调用类指令 4 1DefinitionandFormatofInstruction Machineinstruction 指挥计算机完成某种操作的命令 Format OperationCode OPD OPS 0 1 2 OPD 目的操作数OPS 源操作数 4 2InstructionAddressing 4 2 1寻址方式的基本概念4 2 2与数据有关的寻址方式4 2 3I O端口寻址方式 4 2 1DefinitionofAddressing AddressingApproach 指令中操作数字段实质上是指出操作数存放于何处 一般来说 操作数可以跟随在指令操作码之后 称为立即数 immediatevalue 操作数也可以存放在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 基址变址寻址 basedindexedaddressing 基址变址寻址方式是在指令中给出一个基址寄存器名和一个变址寄存器名 两者内容之和作为操作数的有效地址 基址寄存器为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 相对基址变址寻址 relativebasedindexedaddressing 汇编格式 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通用数据传送指令2累加器专用传送指令3地址传送指令4标志寄存器传送指令 通用数据传送指令 generalpurposedatatransfer 1 传送指令MOV 2 堆栈指令PUSH POP 3 数据交换指令XCHG 1 传送指令MOVformat MOVOPD OPSfunction 将源操作数传送入目的地址 源地址内容不变 即 OPS OPD 下图4 1描述了MOV指令在传送数据时允许传送的路径及类型 图4 1MOV指令所允许的数据传送路径及类型 MOV指令的形式有如下几种 1 从通用寄存器到通用寄存器MOVreg1 reg22 立即数传送到通用寄存器MOVreg data3 通用寄存器和存储单元之间MOVmem reg reg mem 4 立即数传送到存储单元MOVmem data5 段寄存器与通用寄存器间的数据传送MOVseg reg或MOVreg seg6 段寄存器与存储单元间的数据传送MOVseg mem或MOVmem seg Attention IP不能做操作数 DorS CS和IV不能用作目的操作数 D 两操作数中必有一寄存器 exceptIVasS IVcannotbedirectlyassignedtoSR 例4 8 MOVAL B 把字符B的ASCII码 42H AL中MOVAX DATA MOVDS AX 以DATA为数据段的基址 由于DS不能用立即数传送 所以先把DATA AX 再由AX DS 2 数据交换指令XCHG Format XCHGOPD OPSFunction 将源地址与目的地址中的内容互换 即 OPD OPS OPS OPD 例4 9 寄存器与存储器之间数据交换 MOVAX 5678H AX 5678HMOVBX 0FFFFH BX 0FFFFHXCHGAX BX AX 0FFFFH BX 5678H 2 数据交换指令XCHG ATTENTION R与R之间R与M之间 段寄存器不行 M与M之间不行 2 堆栈 Stack 操作指令 1 进栈指令PUSH2 出栈指令POP 1 进栈指令PUSH format PUSHOPSfunction 将寄存器 段寄存器或存储器中的一个字数据压入堆栈 堆栈指针减2 即 SP SP OPS 15 8 SP SP SP OPS 7 0 SP 2 出栈指令POP 语句格式 POPOPD功能 将栈顶元素弹出送至某一寄存器 段寄存器 除CS外 或存储器 堆栈指针加2 从POP指令功能可看出 该指令为PUSH指令的逆过程 即 SP OPD 7 0 SP SP SP OPD 15 8 SP SP 例 设SS 2000HSP 40HBX 3120HAX 25FEH执行下述程序PUSHBXPUSHAXPOPBX堆栈中的数据和SP的变化情况如下图 2000 0000 FE 25 20 31 2000 003C 2000 0040 SP AX 25FEH BX 3120H C 执行PUSHAX指令后 2000 0000 2000 0040 SP AX 25FEH BX 3120H A 指令执行前 2000 0000 FE 25 20 31 2000 003E 2000 0040 SP AX 25FEH BX 25FEH D 执行POPBX指令后 2000 0000 2000 0040 SP AX 25FEH BX 3120H B 执行PUSHBX指令后 31 20 2000 003E 2 累加器专用传送指令 1 输入 输出指令 2 XLAT查表指令 1 输入指令IN 输入指令用来从指定的外设寄存器取信息送入累加器 它有四种形式 语句格式 INAL PORT功能 PORT AL语句格式 INAX PORT功能 PORT AX语句格式 INAL DX功能 DX AL语句格式 INAX DX功能 DX AL 例 INAL 0F1H AL F1H端口内容INAX 80H AL 80H口内容AH 81H口内容MOVDX 310H INAL DX AL 310H口内容INAX DX AL 310H口内容AH 311H口内容 2 输出指令OUT 输出指令用来把累加器的内容送往指定的外设存储器 它有四种形式 语句格式 OUTPORT AL功能 AL PORT语句格式 OUTPORT AX功能 AX PORT语句格式 OUTDX AL功能 AL DX 语句格式 OUTDX AX功能 AX DX 例3 34下面几个是用OUT指令对输出端口进行操作的例子OUT85H AL 85H端口AL内容MOVDX 0FF4HOUTDX AL FF4H端口AL内容MOVDX 300H DX指向300HOUTDX AX 300H端口AL内容301H端口AH内容 2 查表转换指令XLAT format XLAT转换表或XLATfunction 把一个字节从一种代码转换为另一种代码 使用XLAT前 建一个表格 此表最大为256单元 表格首址 BX AL中存表中位移量 执行完XLAT指令后 AL 转换后的代码 3地址传送指令 1 传送有效地址指令LEA 2 传送有效地址及数据段首址指令LDS 3 传送有效地址及附加数据段指令LES 1 传送有效地址指令LEA 语句格式 LEAOPD OPS功能 主存按源地址的寻址方式计算偏移地址 将偏移地址送入指定寄存器 LEA与MOV指令的区别 MOV传送源操作数的内容LEA指令传送的是偏移地址例 设SI 1000H DS 5000H 51000H 1234HLEABX SI BX 1000HMOVBX SI BX 1234H 51000H 2 传送有效地址及数据段首址指令LDS loadpointerusingDS 语句格式 LDSOPD OPS功能 将主存中指定字单元数据送入指定存储器 下一字单元数据送DS寄存器 Format LDSOPD OPS指令功能 源 连续四个单元的M 目的偏移DS段地址注意 源操作数必须为M单元 目的操作数必须为除段R外的16位R 2 传送有效地址及数据段首址指令LDS loadpointerusingDS 例 设 12450H F346H 12452H 0A90HDS 1200H执行LDSSI 450H 后SIF346124504612451F3DS0A901245290124530A 3 传送有效地址及附加数据段指令LES loadpointerusingES format LESOPD OPSfunction 将主存某字单元内容送指定寄存器 即 OPS OPD OPS 2 ES DIcommonlyusedinOPD 4标志寄存器传送指令 1 标志送AH指令LAHF 2 AH送标志指令SAHF 3 标志寄存器进栈指令PUSHF 4 标志寄存器出栈指令POPF 1 标志送AH指令LAHF 语句格式 LAHF功能 将标志寄存器的低8位送入AH寄存器 即 FLAGS 7 0 AH 该指令的执行对标志位无影响 例4 11 标志寄存器传送 执行前 FLAGS 0485H AX 0FFFFH执行指令 LAHF 2 AH送标志指令SAHF 语句格式 SAHF功能 将AH的内容送入标志寄存器的低8位 高8位不变 即 AH FLAGS7 0 从该指令功能可看出 SAHF为LAHF的逆过程 3 标志寄存器进栈指令PUSHF 语句格式 PUSHF功能 将标志寄存器的内容压入堆栈 即 FLAGS SP 4 标志寄存器出栈指令POPF 功能 将栈顶内容弹出送入标志寄存器中 即 SP FLAGS POPF指令与PUSHF指令互为逆过程 例4 12 将标志寄存器的单步标志TF置位 PUSHF FLSGS SP POPAX SP AXORAX 0100H 设置D8 TF 1PUSHAX AX SP POPF SP FLAGS 即 AX FLAGS 4 3 2算术运算类指令 Arithmeticcalculation 1加法类指令2减运算指令3乘运算指令4除运算指令5BCD码调整指令 算术运算指令可处理4种类型的数 1 无符号二进制整数2 带符号二进制整数3 无符号压缩十进制整数 packeddecimal 4 无符号非压缩十进制整数 unpackeddecimal 若为带符号数 用补码 complement 表示压缩十进制数 BCDBCD一字节中表示两个十进制数非压缩十进制数 0000BCD一字节中只表示一个十进制数 Example BHD 无 D 有 UDPD00000111077 77071000100189137 119invalid8911000101C5197 59invalidinvalid 1 加法指令 addition 1 ADD算术加法 addition 格式 ADD目的 源 功能 目的地 目的操作数 源操作数2 ADC带进位算术加法 additionwithcarry 格式 ADC目的 源 功能 目的地 目的操作数 源操作数 CF上述两指令 源操作数 寄存器 存储器 立即数 目的操作数 只能是寄存器和存储单元 example 5EH 3CH Influenceonflags 编程如下 MOVAL 5EH AL 5EH 94 MOVBL 3CH BL 3CH 60 ADDAL BL AL 9AH 154 01011110 5E 00111100 3C 10011010 9A 标志位 ZF 0 AF 1 CF 0 SF 1 PF 1 OF 1 a 若5EH 3CH为无符号数 D7data0 255 FFH 9AH FFH所以OF 1无意义 b 若5EH 3CH为带符号数 D7为符号位 128 127结果154超出此范围所以OF 1结果无效 若未产生溢出 OF 0 SF 1时表示结果为负 3 INC加1指令 increment 格式 INC目的 功能 目的 目的操作数 1目的操作数 通用R或M单元主要用于循环计数 修改地址指针等例 INCBL BL BL 1INCBYTEPTR BX 内存字节单元内容 1INCWORDPTR BX 内存字单元内容 1 4 AAA加法的ASCII码调整指令 ASCIIAdjustforAddition 格式 AAA 功能 对AL寄存器的内容调整为一位非压缩十进制数 应用场合 在非压缩十进制数或ASCII码表示的十进制数的加法运算中 将结果调整为一位非压缩十进制数 AAA指令调整过程 若AL低四位 9或标志位AF 1 则 a AL AL 6b 将AL高四位清0c AF是1 CF是1 AH AH 1否则只将AL高四位清0 例 设AL 9BCDBL 5BCDAH 0求和 ADDAL BL 00001001 9 00000101 500001110低4位 9AAA 00000110加6调整00010100 00001111清高4位留低4位00000100AL中CF 1AF 1AH 1 DAA加法的十进制调整指令 DecimalAdjustforAddition 格式 DAA 功能 将AL中内容调整为压缩BCD数应用场合 用于将两压缩BCD数之和调整为正确的BCD数 调整过程 若AL低四位 9或标志位AF 1 则 AL AL 6对低半字节调整 调整过程 若AL低四位 9或标志位AF 1 则 AL AL 6对低半字节调整若AL高四位 9或标志位CF 1则 AL AL 60H对高半字节调整并CF置1 否则CF是0 例 设AL 88BCDBL 49BCD求AL BL ADDAL BL 10001000 88 01001001 4911010001AF 1DAA 00000110加6调整11010111 01100000加60H调整00110111结果AL 37BCDCF 1 2 减法指令 subtraction 1 SUB不带借位的减法指令格式 SUB目的 源 功能 目的 目的操作数 源操作数2 SBB带进位算术减法 subtractionwithborrow 格式 SBB目的 源 功能 目的 目的操作数 源操作数 CF应用于多字节减法中 3 DEC减1指令格式 DEC目的 功能 目的 目的操作数 1 4 NEG取补指令 negate 格式 NEG目的 功能 目的 0 目的操作数5 CMP比较指令 compare 格式 CMP目的 源 功能 两个操作数相减 不产生运算结果 仅影响标志 6 AAS减法的ASCII调整指令 ASCIIAdjustforsubtraction 格式 AAS 功能 对AL中的内容调整为非压缩十进制数用在SUB和SBB指令之后 且操作数是非压缩十进制数或ASCII码表示的十进制数 调整过程 若AL低四位 9或标志位AF 1 则 a AL AL 6AF是1b 将AL高四位清0c AH AH 1 CF是1否则不调整 例3 54设AL 3BCDCL 8BCD求AL BL 指令控制过程如下 SUBAL CL00000011BCD300001000BCD8AAS11111011低4位大于900000110减6调整111101010000111100000101高4位清0结果AL 5 CF 1 7 DAS减法的十进制调整指令 DecimalAdjustforSubtraction 格式 DAS 功能 将AL中内容调整为正确的压缩十进制数调整过程 若AL低四位 9或标志位AF 1 则 AL AL 6AF是1若AL高四位 9或标志位CF 1 则 AL AL 60HCF是1否则不调整 3 乘法指令 只有非压缩十进制数乘 1 MUL无符号数乘法 multiply 格式 MUL源 功能 ALorAX a 源操作数为字节 积高8位 AH积低8位 ALb 源操作数为字 积高16位 DX积低16位 AX 源操作数 可以是寄存器或存储单元 不能是立即数 源操作数为存储单元时 必须说明是字节 B 还是字 W 如 MULB SI AX AL 内存中某字节 MULW BX DX AX AX 内存中某字 MUL指令执行后 影响CF和OF标志 若积的高半部分 AH或DX 不为0 则CF是1 OF是1 通常测CF和OF的状态 确定 AH或DX 是否为积的高半部分 P85例3 573 58 例 设AL 55HBL 14HMULBL AX AL BL 06A4HAHALAX06A4因为AH 06H 0 所以CF 1 OF 1 AH中是积的高半部分 注意 不能用MUL指令做带符号数的乘法 例如 FFH FFH 二进制乘式 11111111 1111111111111110000000011 当作无符号数FFH FFH 255 255 65025正确2 当作带符号数FFH FFH 1 1 1111111000000001 取补码 1000000111111111 511 D错误正确答案为 0000000000000001 1 D 2 IMUL带符号数乘法 IntegerMultiply 格式 IMUL源 功能 a 源操作数为字节 AX AL 源b 源操作数为字 AX AX 源低字DX AX 源高字若积的高半部分为非全0或非全1 为积的一部分 置CF 1 OF 1若积的高半部分为全0或全1 仅为符号 置CF 0 OF 0 所以检测CF和OF的状态 确定是否保存积的高半部分 字节或字 AAM乘法的ASCII调整指令 ASCIIAdjustformultiply 格式AAM功能 将AL中的BCD数调整为两个非压缩十进制数 低位 AL 高位 AH 调整过程 AH AL 10的商 quotient AL AL 10的余数 remainder 执行指令后 影响ZF SF PF标志 例3 60求两个非压缩十进制数09和06之乘积 可用如下指令实现 MOVAL 09H AL00001001MOVBL 06H BL00000110MULBL00110110AAM 54H 其中调整AL 10商为5AH AL 10余数为4AL 所以AH 05 AL 04 即在AX中得到正确结果AX 0504H 即BCD数54 4 除法指令 只有非压缩十进制数除 1 DIV无符号数除法 division unsigned 格式 DIV源 功能 两个无符号二进制数除法操作若a 源为字节 AL AX 源 字节 的商AH AX 源 字节 的余数b 源为字 32位被除数在DX AX中AX DX AX 源 字 的商DX DX AX 源 字 的余数c 若为16位数除16位数 则DX清0 被除数 AX 2 IDIV带符号数除法格式 IDIV源 功能 操作与DIV相同关于除法运算产生溢出的问题 字节操作时 被除数高8位 除数产生溢出字操作时 被除数高16位 除数产生溢出即商数超过了AL或AX所表示的范围 产生溢出时CPU自动产生除法错中断 此时所得的商和余数为不确定数 3 CBW字节转移为字指令 convertbytetoword 格式 CBW 功能 将AL中符号位扩展到AH所有位 4 CWD字节转换为双字指令 convertwordtodoubleword 格式 CWD 功能 将AX中符号位扩展到DX所有位 例 求 38 3的商和余数 38的补码 11011010BMOVAL 11011010B 38 ALMOVCH 00000011B 3 CHCBW AX 1111111111011010BIDIVCH AX CHAL 12 商 AH 2 余数 AAD除法的ASCII调整指令 ASCIIAdjustforDivision 格式 AAD 功能 做除法时 把BCD码转为二进制数AL AH 10 ALAH 00 例 设AX 0307HBL 05H求AX BL 编程如下 AAD 转换03 10 07 3710 25H 00100101B AL AH 00DIVBL AX BL的商 AL 7AX BL的余数 AH 2 例3 64编写程序 计算75 6 12 3该除法运算过程表示如下 第一个商为112第二个商为26756第一个余15数为1123第二个余数为3 程序如下 FIRSTDB06H 除数 divider 6SECONDDB75H 被除数 dividend 75THIRDDB2DUP 0 存商FOURDB 存余数 MOVAH 00H 第一个被除数高位AH清零MOVAL SECOND AL被除数75ANDAL 0F0H 截取高4位MOVCL 04HROLAL CL 移至低4位DIVFIRST AX 06 即0007 06得结果 AL商为1 AH余数1 MOVTHIRD 1 AL 结果单元第一个商1MOVAL SECOND AL被除数75ANDAL 0FH AL截低四位 故AX 0105HAAD 将AX中内容0105H调整为0FHDIVFIRST 0FH 6 结果 AL商为2AH余数为3MOVTHIRD AL THIRD单元第二个商2MOVFOUR AH FOUR单元第二个余数2 图3 16表示上述除法程序执行过程中 数据在内存中的存放格式 FIRST06除数SECOND75被除数THIRD02商THIRD 101FOUR03余数 4 3 3逻辑运算与移位指令 1逻辑运算指令2移位指令3循环移位指令 1逻辑运算指令 1 求反指令NOT 2 逻辑乘指令AND 3 测试指令TEST 4 逻辑加指令OR 5 按位加指令XOR 1 求反指令NOT语句格式 NOTOPD功能 将目的地址中的内容逐位取反后送入目的地址 即 OPD OPD 例4 21 逻辑非运算 MOVAX 878AH AX 878AHNOTAX AX 7875H 2 逻辑乘指令AND语句格式 ANDOPD OPS功能 将目的操作数和源操作数进行逻辑乘运算 结果存目的地址 即 OPD OPS OPD 该指令用于清除目的操作数中与源操作数置0的对应位 说明 逻辑乘的运算法则为 1 1 1 1 0 0 0 1 0 0 0 0 例4 22 将AL中第3位和第7位清零 MOVAL 0FFHANDAL 77H 3 测试指令TEST语句格式 TESTOPD OPS功能 源地址和目的地址的内容执行按位的逻辑乘运算 结果不送入目的地址 即 OPD OPS 例4 23 测试AX中的第12位是否为0 不为0则转L TESTAX 1000HJNEL 4 逻辑加指令OR语句格式 OROPD OPS功能 将目的操作数和源操作数进行逻辑加运算 结果存目的地址 即 OPD OPS OPD 说明 逻辑加的运算法则为 1 1 1 1 0 1 0 1 1 0 0 0 例4 24 将AL寄存器中第3位和第7位置1 MOVAL 0ORAL 88H 5 按位加指令XOR语句格式 XOROPD OPS功能 目的操作数与源操作数做按位加运算 结果送入目的地址 即 OPD OPS OPD 说明 按位加的运算法则为 1 1 0 1 0 1 0 1 1 0 0 0 例4 25 按位加运算 MOVAL 45H AL 45HXORAL 31H AL 74H 2移位指令 移位指令包括算术移位指令 逻辑移位指令和循环移位指令 分别进行左移和右移操作 这些指令均有统一的语句格式 标号 操作符OPD 1或 标号 操作符OPD CL其功能为将目的操作数的所有位按操作符规定的方式移动1位或按寄存器CL规定的次数 0 255 移动 结果送入目的地址 目的操作数是8位 或16位 的寄存器数据或存储器数据 1 算术左移和逻辑左移指令SAL SHL 语句格式 SALOPD 1或SHLOPD 1SALOPD CL或SHLOPD CL功能 将 OPD 向左移动CL指定的次数 最低位补入相应的 的内容为最后移入位的值 2 算术右移指令SAR语句格式 SAROPD 1或SAROPD CL功能 将 OPD 向右移动CL指定的次数且最高位保持不变 CF的内容为最后移入位的值 例4 26 算术右移运算 MOVBH 0F4H BH 0F4HMOVCL 2 CL 2SARBH CL BH 0FDH CF 0该例语句 SARBH CL 实际上完成了 BH BH的运算 所以 用SAR指令可以实现对有符号数除2n的运算 n为移位次数 3 逻辑右移指令SHR语句格式 SHROPD 1或SHROPD CL功能 将 OPD 向右移动CL规定的次数 最高位补入相应个数的 CF的内容为最后移入位的值 3 循环移位指令 1 循环左移指令ROL语句格式 ROLOPD 1或ROLLPD CL功能 将目的操作数的最高位与最低位连成一个环 将环中的所有位一起向左移动CL规定的次数 CF的内容为最后移入位的值 2 循环右移指令ROR语句格式 ROROPD 1或ROROPD CL功能 将目的操作数的最高位与最低位连成一个环 将环中的所有位一起向右移动CL规定的次数 CF的内容为最后移入位的值 3 带进位的循环左移指令RCL语句格式 RCLOPD 1或RCLOPD CL功能 将目的操作数连同CF标志一起向左循环移动CL规定的次数 4 带进位的循环右移指令RCR语句格式 RCROPD 1或RCROD CL功能 将目的操作数连同CF标志一起向右循环移动所规定的次数 4 3 4串操作类指令 string 串操作指令 数据传送类指令每次只能传送一个数据 若要传送大批数据就需要重复编程 这样就浪费了大量的时间和空间 为此8086提供了一组处理主存中连续存放数据串的指令 这就是串操作指令 1 传送指令MOVS format MOVS目的串 源串 judgeMOV MOVSB MOVSWfunction 将以SI为指针的源串中的一个字节 或字 存储单元中的数据传送至以DI为指针的目的地址中去 并自动修改指针 使之指向下一个字节 或字 存储单元 即 DS SI ES DI DF 0 SI 和 DI 1or2 DF 1 SI 和 DI 1or2 2 串比较指令CMPSformat CMPS目的串 源串 CMPSB CMPSWfunction 将SI所指的源串中的一个字节 或字 存储单元中的数据与DI所指的目的串中的一个字节 或字 存储单元中的数据相减 并根据相减的结果设置标志 但结果并不保存 即 SI DI 修改串指针 使之指向串中的下一个元素 当DF 0时 SI 和 DI 增量 当DF 1时 SI 和 DI 减量 3 串搜索指令SCASformat SCAS目的串SCASB SCASWFunction AL 字节 或AX 字 中的内容与DI所指的目的串中的一个字节 或字 存储单元中的数据相减 根据相减结果设置标志位 结果不保存 即 字节操作 AL DI 字操作 AX DI 修改指针使之指向串中的下一个元素 当DF 0时 DI 增量 当DF 1时 DI 减量 4 从源串中取数指令LODSfunction LODS源串 LODSB LODSWfunction 将SI所指的源串中的一个字节 或字 存储单元中的数据取出来送入AL 或AX 中 即 字节操作 SI AL 字操作 SI AX 修改指针SI 使它指向串中的下一个元素 当DF 0时 SI 增量 当DF 1时 SI 减量 5 往目的串中存数指令STOSformat STOS目的串STOSB STOSWfunction 将AL或AX中的数据送入DI所指的目的串中的字节 或字 存储单元中 即 字节操作 AL DI 字操作 AX DI 修改指针DI 使之指向串中的下一个元素 当DF 0时 DI 增量 当DF 1时 DI 减量 6 重复前缀指令REPREPE REPZREPNE REPNZ 1 REPREP前缀用在MOVS STOS LODS指令前 功能 每执行一次串指令 CX 1 直到 CX 0 重复执行结束 2 REPE REPZ该指令一般用在CMP SCAS指令前 功能 每执行一次串指令 CX 1 并判断ZF标志是否为0 只要 CX 0或ZF 0 则重复执行结束 3 REPNE REPNZ该指令一般用在CMPS SCAS指令前 功能 每执行一次串指令 CX 1 并判断ZF标志是否为0 只要 CX 0或ZF 1 则重复执行结束 字符串指令的隐含约定 1 源串 位于当前数据段 始 末 地址DS SI 可用段前缀修改段地址 2 目的串 位于当前附加段 始 末 地址ES DI 不允许用前缀修改ES 若在同一段内进行串运算 必使DS和ES指向同一段 指令名称 字节 字操作 字节操作 字操作 字符串传送MOVS目的串 源串MOVSBMOVSW 字符串操作指令的类型和格式 字符串比较CMPS目的串 源串CMPSBCMPSW 字符串扫描SCAS目的串SCASBSCASW 字符串装入LODS源串LODSBLODSW 字符串存储STOS目的串STOSBSTOSW 3 每执行一次串操作 SI DI自动修改 4 SI DI自动修改方法 每执行一次时 DF 0 递增 字节操作 SI DI增1字操作 SI DI增2DF 1 递减 字节操作 SI DI减1字操作 SI DI减25 字符串长度放在CX寄存器中重复前缀的使用 在基本串指令前加前缀 每重复一次CX 1 CX 图4 3流程图总结了串操作的过程 图4 3串操作流程图 4 3 5控制转移类指令 1无条件转移指令2条件转移指令3循环控制指令4子程序调用指令 1 无条件转移和调用指令1 JMP无条件转移指令 JUMP 格式 JMP目的地址功能 使程序转到指令中指定的目的地址去执行 JMP指令的类型 A类 段内转移 转移目的地址与JMP指令同段B类 段间转移 程序转到另一代码段去执行 类型方式寻址目标指令举例 段内转移 段间转移 直接立即短转移 8位 JMPSHORTPROG S 直接立即近转移 16位 JMPNEARPTRPROG N 间接寄存器 16位 JMPBX 间接存储器 16位 JMPWORDPTR5 BX 直接立即转移 32位 JMPFARPTRPROG F 间接存储器 32位 JMPDWORDPTR DI 表3 10无条件转移指令的类型和方式 a 段内直接转移指令JMPSHORT标号 IP IP DISP LJMPNEARPTR标号 IP IP 16位位移量例 偏移量机器码程序00000405PROG S ADDAL 05H000290NOP0003EBFBJMPSHORTPROG S 000590NOPEND 机器码在内存中放置 代码段CS 0000H00000040000105000029000003EB00004FB000059000006 00007 计算 指令中位移量 FB 目的地址偏移量 IP当前值 0 5 5补码 FBH转移指针IP IP当前值 指针中的位移量 0005H FFFB 0000H即转到PROG S处去执行 b 段内间接转移指令 设BX 4500HJMPBX IP BX寄存器内容 设DS 2000H BX 100H 20105H 4F00HJMPWORDPTR5 BX IP 存储器单元内容IP 20000H 100H 5H 20105H 4F00H程序转到代码段内地址为4F00处去执行 c 段间直接 远 转移指令指令中指定的段地址 CS指定的位移量 IP设标号PROG F所在段址 3500H 其偏移量 080AHJMPFARPTRPROG F 转到 IP 080AHCS 3500H处去执行 d 段间间接转移指令设CS 1200HIP 05HDS 2500HSI 1300H 26425H 4500 26427H 32F0JMPDWORDPTR SI 0125H 目的操作数地址 DS 10H SI DISP 26425HIP 4500HCS 32F0H执行后转到32F0 4500H处去执行 2 过程调用和返回指令 CALLandRETURN 子程序 subroutine 过程procedure 具有特定功能的程序段主程序 调用子程序的程序过程嵌套 在过程运行中又去调用另一过程 过程 子程序 以PROC语句打头 过程结束RETENDP主程序 过程 过程名 PROCNEAR CALL过程名 RET ENDP 子程序调用和返回指令调用格式 CALL过程名 返回格式 RET CALL指令执行过程 第一步 需返回的地址入栈 断点入栈 对近调用 先SP SP 2 IP内容入栈 对远调用 先SP SP 2 CS入栈后SP SP 2 IP入栈第二步 转到相应的子程序入口地址 执行子程序 对于近过程返回 堆栈弹出一个字 IPSP SP 2对于远过程返回 弹出第一个字 IP SP SP 2 弹出第二个字 CS SP SP 2a 段内直接调用和返回P104例3 83 自学 b 段内间接调用和返回P106例3 84 自学 c 段内直接调用P106例3 85 自学 d 段内间接调用P107例3 86 自学 2 条件转移指令条件转移指令均为段内短转移 转移距离 128 127常用于比较指令或运算 逻辑指令之后 1 直接标志转移指令在指令的助记符中直接给出转移条件 通常 CF ZF SF OF PF标志 指令助记符测试条件指令功能 JCCF 1有进位转移 JNCCF 0无进位转移 JZ JEZF 1结果为零 相等转移 JSSF 1符号为负转移 JNSSF 0符号为正转移 JOOF 1溢出转移 JNOOF 0无溢出转移 JP JPEPF 1奇偶位为1 为偶转移 JNP JPOPF 0奇偶位为0 为奇转移 直接标志条件转移指令 JNZ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年副高卫生职称-临床医学类-呼吸内科学(副高)代码:002历年参考题库典型考点含答案解析
- 2025年初级卫生职称-初级技师-卫生检验技术(师)代码:211历年参考题库含答案解析
- 2025年住院医师规培-重庆-重庆住院医师规培(儿科)历年参考题库含答案解析(5套)
- 高中地理学科面试真题及答案分享
- 2025年住院医师规培-贵州-贵州住院医师规培(皮肤科)历年参考题库含答案解析
- 2025年住院医师规培-福建-福建住院医师规培(检验医学科)历年参考题库含答案解析
- 小区设施专家面试题及答案解析
- 2025年住院医师规培-湖南-湖南住院医师规培(康复理疗科)历年参考题库含答案解析(5套)
- 2025年住院医师规培-海南-海南住院医师规培(医学检验科)历年参考题库含答案解析
- 2025年住院医师规培-河南-河南住院医师规培(皮肤科)历年参考题库含答案解析
- 劳务派遣工作知识培训课件
- 无人机反制设备原理课件
- 2025年道路运输两类人员安全员考核分享题库及答案
- 中国肺血栓栓塞症诊治、预防和管理指南(2025版)
- 2025年村干部考试试题(含答案)
- 工会招聘考试题及答案
- 1.1认识社会生活 教案 2025-2026学年统编版道德与法治八年级上册
- 山东省技工学校模拟面试全新系列题目
- 小学体育教学活动设计与课程案例
- 2025至2030年中国互联网数据中心应用行业市场深度评估及投资战略规划报告
- 2025年中学教师事业单位教师招聘化学学科专业知识考试试题
评论
0/150
提交评论