微机原理与接口技术 8086指令系统ppt课件_第1页
微机原理与接口技术 8086指令系统ppt课件_第2页
微机原理与接口技术 8086指令系统ppt课件_第3页
微机原理与接口技术 8086指令系统ppt课件_第4页
微机原理与接口技术 8086指令系统ppt课件_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三章8086 8088指令系统 指令是计算机工作的指示和命令 它是一组代表一定意义的二进制编码信息 程序是按一系列按一定规则顺序排列的指令 而计算机 微型机 的整个工作过程就是执行程序的过程 指令的含义包含 指明该做什么 指明对谁做 指令由两部分构成 操作码 操作数 操作码指明计算机做什么 操作数是参与操作的数 在指令中操作码是不可缺少的 但操作数可以没有 也可以有一个操作数或两个操作数 根据操作数的个数 指令格式可分为以下几种 1 零操作数指令指令格式中没有操作数或操作数是隐含约定的 2 一操作数指令指令格式中有一个操作数 或还有一个隐含的操作数 实际上是双操作数 3 二操作数指令指令中有两个操作数 其中一个为目的操作数 另一个为源操作数 由此可见 操作数可分为源操作数和目的操作数 源操作数 只能读取的操作数 目的操作数 即可读取又可写入 存放操作结果 的操作数 操作数又可分为两大类 数据操作数和地址操作数 3 18086 8088寻址方式 寻址方式 找到实际参与操作的数的方式 从另一角度讲 也可以说是实际参与操作的数的存取方式 下面介绍有关操作数的寻址方式 一 立即寻址操作码后紧跟着的数就是实际参与操作的数 该操作为指令代码存放在代码段中 二 寄存器寻址操作码紧跟着的是寄存器的编码 该寄存器中存放的是实际参与操作的数 三 直接寻址操作码后紧跟着的是一个存储单元的有效地址 偏移地址 该单元存放的是实际参与操作的数 操作数物理地址 DS 10H EA 例 MOVAX 2000H 若DS 3000H 则物理地址 3000H 10H 2000H 指令执行后 AH 30H AL 50H 低字节在前高字节在后 四 寄存器间接寻址 EA表示有效地址 BP 的段地址寄存器为SS 其余段地址寄存器为DS 操作数物理地址 DS 10H EA 执行指令 MOVAX BP 执行后 AX BP SS 20030H 图形表示如下 例1 寄存器和存储器内容分别为 AX 0 BP 0030H SS 2000H 20030H 1234H 例2 设执行前 AX 0040H BX 0030H DS 2000H 20036H 0050H执行指令 ADD6 BX AX执行后 AX BX DS 20036H 图形表示如下 执行 20036H AX 20036H执行后 AX 0040H BX 0030H DS 2000H 20036H 0090H 有效地址可以由以下三种地址分量组成 位移量 Displacement 它是存放在指令中的一个8位或16位的数 但它不是立即数 而是一个地址 基址 BaseAddress 它是存放在基址寄存器BX或BP中的内容 变址 IndexAddess 它是存放在变址寄存器SI或DI中的内容 对于某条具体指令 这三个地址分量可有不同的组合 如果存在两个或两个以上的分量 那么就需要进行加法运算 求出操作数的有效地址 EA 进而求出物理地址 PA 正是因为这三种地址分量有不同的组合 才使得对存储器操作数的寻址产生了若干种不同的方式 五 基址变址寻址 EA表示有效地址 BP 的段地址寄存器为SS 其余段地址寄存器为DS 操作数物理地址 DS 10H EA 3 28086 8088的指令系统8086 8088指令系统有 条指令 共 组 功能较强数据传送指令串处理指令算术指令控制转移指令逻辑指令处理机控制指令 为了更快的学习 领会指令系统 我们作如下约定 RR表示通用寄存器 AX BX CX DX BP SP SI DI SER表示段寄存器 CS DS ES SS MEM表示内存单元的有效地址 MEM 表示该单元的内容AC表示AX或ALNN表示立即数F表示标志寄存器 一 数据传送指令1 基本传送指令MOVX Y X Y该指令可进行的传送有 RR RR SER RR SER AC MEM RR MEM NN 16位 例 MOVAX BX 将BX中的16位二进制数送AXMOVAL CL 将CL中的8位二进制数送ALMOVES DX 将DX中的16位二进制数送ESMOVAX BX 将 BX 中的16位二进制数送AX AL BX AH BX 1 MOV DI AX 将AX中的16位二进制数送 DI 和 DI 1 单元中MOVCX 1000H 将 1000H 和 1001H 中的16位二进制数送CX单元中MOVBX 5040H 将5040H送BXMOVAL E 将字符E送AL 即将E的ASCII码送ALMOVAX 30H BX SI 将30H BX SI单元的内容送AX 注意 字符用ASCII码 形式上可写成 E BP 的段地址为SS 其余均为DS 2 堆栈操作指令堆栈 后进先出 LIFO 的存储区 向堆栈里存数我们称为 压入 从堆栈里取数我们称为 弹出 SP为堆栈指示器 或堆栈指针 它存放的始终是栈顶的有效地址 段地址用SS a PUCHZ Z RR MEM SER SP SP 2 SP 1 SP Z 执行指令时 SP SP 1 然后 SP ZH 再SP SP 1 然后再 SP ZL 总结 减1压入 减1压入 先高后低 b POPZ Z同上定义 Z SP 1 SP 执行指令时 ZL SP 然后SP SP 1 再ZH SP 再然后SP SP 1L 总结 弹出加1 弹出加1 先低后高 例 CX 12FAH SP 0008H SS 0200H 请画出执行PUCHCX POPAX两条指令后的堆栈和SP的变化 c 对标志寄存器进行堆栈操作PUCHFPOPF3 交换指令XCHGX Y X Y RR MEM RR 4 表转换指令XLAT AL BX AL 例如DS F000H 在偏移地址0040开始的存储区中存有0 9的平方表 现用XLAT求得AL中数的平方 假设AL中的数为0 9中之一 如AL 3 XLAT指令是用来将一种字节代码转换成另一种字节代码 即将BX的内容 代码表格首址 和AL的内容 表格偏移量 相加作为有效地址 并从中读出此内存表格地址单元的内容传送到AL累加器中 MOVAX 0F000HMOVDS AXMOVBX 0040HMOVAL 03HXLAT EA 0040H 03H 0043H物理地址 0F0000H 0043H程序段执行后 AL 09H XLAT实际上是查表指令 表的首址放在基址寄存器中 要查的数放AL中 执行该指令后 AL即为查表结果 5 LDSRR MEM RR MEM DS MEM 2 此指令的功能是将源操作数所对应的双字长的内存单元中的高字内容 一般为16位段基址 送入DS 低字内容 一般为偏移地址 送入指令所指定的寄存器中 例 DS C000H C0010H 0180H C0012H 2000HLDSSI 0010H 将上指令执行后 SI 0180H DS 2000H6 LESRR MEM RR MEM ES MEM 2 此指令的功能是将源操作数所对应的双字长的内存单元中的高字内容 一般为16位段基址 送入ES 低字内容 一般为偏移地址 送入指令所指定的寄存器中 7 LEARR MEM RR MEM的有效地址 例 主存偏移地址的获取 MOVBX 0100H BX 0100HMOVSI 0210H SI 0210HLEABX 1234 BX SI BX 1544H 8 LAHF AH PSW的低字节 AH PSWLSAHF PSWL AH 9 输入输出指令输入指令输出指令INAC DXOUTDX ACINAC PORTOUTPORT AC 二 算术运算指令1 加 减指令a 不带进位位的加 减指令ADDX Y X X YSUBX Y X X YX Y可为 RR RR 或 MEM NN MEM RR 或NN AC NN 该指令用来完成I O端口与累加器之间的数据传送 PORT为端口地址 DX中存放端口地址 b 带进位位的加 减指令ADCX Y X X Y CFSBBX Y X X Y CFX Y定义同上 c 加1 减1指令INCZ Z Z 1DECZ Z Z 1Z RR MEM 例1 ADDAL 50H AL AL 50HADDDI SI DI DI SISUBBX CX BX BX CXSUB BP 2 CL BP 2 BP 2 CL 例2 两个32位的加法 被加数 加数 和的内存分配如下 H H 2 比较指令CMPX Y X Y X Y的定义与前相同注意 X Y的差不送回X 但影响标志位 根据标志位来判断两数的大小 其规则如下 X Y为无符号数 用CF来判断 均为带符号正数 最高位为 的无符号数 可用 如上法来判断大小 亦可用 来判断大小 均为带符号数 补码 用 两位标志来判断大小 或 注 两数判断大小 要根据不同类型的数来进行 如两数为无符号数 则X Y 用 OF无意义 如两数为带符号数 补码 则SF OF 0 X Y 用 3 求补指令 求负 NEGZ 功能 将目的操作数的每一位求反 包括符号位 后加1 结果送目的地址 Z与前定义相同 例 求补运算 MOVAX 0FF64HNEGAL AX 0FF9CHSUBAL 9DH AX 0FFFFHNEGAX AX 0001HDECAL AX 0000HNEGAX AX 0000H 4 乘法指令MULZ 无符号数乘法IMULZ 带符号数乘法 AX AL Z Z为单字节数 单字节乘法 DXAX AX Z Z为双字节数 双字节乘法Z的定义同前 Z RR MEM 例1 无符号数0A3H与11H相乘 MOVAL 0A3H AL 0A3HMOVBL 11H BL 11HMULBL AX 0AD3H 例2 有符号数0B4H与11H相乘 MOVAL 0B4H AL B4HMOVBL 11H BL 11HIMULBL AX 0FAF4H 5 除法指令DIVZ 无符号数除法IDIVZ 带符号数除法 AX Z AH 余数 AL 商 16位 8位 DXAX Z DX 余数 AX 商 32位 16位Z的定义同前 Z RR MEM 例1 写出实现无符号数0400H 0B4H运算的程序段 MOVAX 0400H AX 0400HMOVBL 0B4H BL 0B4HDIVBL 商 AL 05H 余数 AH 7CH 例2 写出实现有符号数0400H 0B4H运算的程序段 MOVAX 0400H AX 0400HMOVBX 0B4H BX 0B4HIDIVBX AL 0F3H AH 24H 6 扩展指令CBW 把AL的符号位 D7 扩展到AH 字节扩展 CBD 把AX的符号位 D15 扩展到DX 使AX扩展扩展成双字 扩展指令多用于带符号数运算 被扩展数的符号位为0 则所扩展的寄存器每位为0 被扩展数的符号位为1 扩展寄存器的每位为1 例2 将字数据扩展成双字数据 MOVDX 0 DX 0MOVAX 0FFABH AX 0FFABHCWD DX 0FFFFH AX 0FFABH 例1 将字节数据扩展成字数据 MOVAL 0A5H AL 0A5HCBW AX 0FFA5HADDAL 70H AL 25HCBW AX 0025H 7 十进制调整指令 注 一个字节表示2位的BCD码 称为组合的BCD码 或压缩的BCD码 01010011 53 一个字节表示1位的BCD码 高4位全为0 称为非压缩的BCD码 0000010100000011 53 语句格式 DAA功能 如果AL寄存器中低4位大于9或辅助进位 AF 1 则 AL AL 6且 AF 1 同理 如果 AL 0A0H或 CF 1 则 AL AL 60H且 CF 1 同时 SF ZF PF均有影响 例 压缩BCD码的加法运算 MOVAL 68H AL 68H 表示压缩BCD码68MOVBL 28H BL 28H 表示压缩BCD码28ADDAL BL 二进制加法 AL 68H 28H 90HDAA 十进制调整 AL 96H 实现压缩BCD码加法 68 28 96 语句格式 DAS功能 如果 AF 1或AL寄存器中低4位大于9 则 AL AL 6且 AF 1 如果 AL 0A0H或 CF 1 则 AL AL 60H且 CF 1 同时SF ZF PF均受影响 例 压缩BCD码的减法运算 MOVAL 68H AL 68H 表示压缩BCD码68MOVBL 28H BL 28H 表示压缩BCD码28SUBAL BL 二进制减法 AL 68H 28H 40HDAS 十进制调整 AL 40H 实现压缩BCD码减法 68 28 40 AAA 加法后 AL 对AL进行非压缩的BCD码 AH AH 调整产生的进位 AAS 减法后 AL 对AL进行非压缩的BCD码 AH AH 调整产生的借位 AAM 对2个单字节的非组合BCD码进行相乘后 对AL中的积进行非组合BCD码调整 例 MOVAL 09HMOVBL 06HMULBL AL 36HAAM 调整后 AH 05 AL 04 AAD 对AX中的2位非组合BCD码除以一位非组合BCD码 在DIV前必须用该指令把非组合BCD码转换成二进制数 并存于AL中 然后再除 如 0307H 37H 03 10 07 37 25H ALAL 10 AH AL AH 0 例 在22000H开始的存储区中存有10个字节的压缩BCD码的被加数和加数 请将其和存入被加数存储区中 被加数 加数 和均为低字节在前 高字节在后 分析 由于被加数 加数 和为压缩的BCD码 因此需用DAA对AL进行调整 加法应用字节加法 注 Z这组调整指令对标志位均用影响 注意看书 MAIN MOVAX 2000HMOVDS AXMOVSI 2000HMOVCX 0AHCLCL1 MOVAL SI ADCAL SI 0AH DAAMOV SI ALINCSILOOPL1RET 三 逻辑运算指令1 逻辑运算指令ANDX Y X X YNOTZ Z ZORX Y X X YXORX Y X X YX Y Z的定义同前 例 将AL中第3位和第7位清零 ANDAL 77H 2 测试指令TESTX Y X Y 只作与操作但不回送结果 影响标志位 例 测试AX中的第12位是否为0 不为0则转向L TESTAX 1000HJNEL 四 移位和循环移位指令 1 算术左移和逻辑左移指令SAL SHL 语句格式 SALZ 1或SHLZ 1SALZ CL或SHLZ CL功能 将 Z 向左移动CL指定的次数 最低位补入相应的 的内容为最后移入位的值 即 只有最高位发生变化时 OF 1 否则OF 0 2 算术右移指令SAR语句格式 SARZ 1或SARZ CLCF功能 将 Z 向右移动CL指定的次数且最高位保持不变 CF的内容为最后移入位的值 即实现对有符号数除2n的运算 n为移位次数 3 逻辑右移指令SHR语句格式 SHROPD 1或SHROPD CL功能 将 OPD 向右移动CL规定的次数 最高位补入相应个数的 CF的内容为最后移入位的值 例1 MOVCL 5SAR DI CL指令执行前 DS OF800H DI 180AH F980A 64H指令执行后 F980AH 3H CF 0相当于100d 32d 3例2 MOVCL 5SHR DI CL执行前 DS F800H DI 180AH F980A 64H执行后 F980AH 03HCF 0 例3 MOVCL 5SAR DI CL执行前 DS F800H DI 180AH F980AH 9CH 100d 执行后 F980AH FCHCF 1例4 MOVCL 5SHR DI CL执行前 DS F800H DI 180AH F980AH 9CH执行后 F980AH 04H CF 1 4 循环左移指令ROL语句格式 ROLZ 1或ROLZ CL功能 将目的操作数的最高位与最低位连成一个环 将环中的所有位一起向左移动CL规定的次数 CF的内容为最后移入位的值 5 循环右移指令ROR语句格式 RORZ 1或RORZ CL功能 将目的操作数的最高位与最低位连成一个环 将环中的所有位一起向右移动CL规定的次数 CF的内容为最后移入位的值 6 带进位的循环左移指令RCL语句格式 RCLZ 1或RCLZ CL功能 将目的操作数连同CF标志一起向左循环移动CL规定的次数 7 带进位的循环右移指令RCR语句格式 RCRZ 1或RCRZ CL功能 将目的操作数连同CF标志一起向右循环移动所规定的次数 五 串操作指令 数据块 对一串字符 一串数据进行操作特点 这种指令对字节串 字串进行操作 所有串操作指令 源地址为DS SI 目的地址ES DI DF 1 上行 串源地址 目的地址递减 DF 0 下行 串源地址 目的地址递增 通过加前缀 将单条指令操作或重复操作指令 循环操作 重复次数CX 1 传送 串传送 语句格式 MOVSB 字节串传送MOVSW 字串传送功能 将以SI为指针的源串中的一个字节 或字 存储单元中的数据传送至以DI为指针的目的地址中去 并自动修改指针 使之指向下一个字节 或字 存储单元 即 DS SI ES DI 当DF 0时 SI 和 DI 增量 当DF 1时 SI 和 DI 减量 2 串比较指令CMPS语句格式 CMPSB 字节串比较CMPSW 字串比较功能 将SI所指的源串中的一个字节 或字 存储单元中的数据与DI所指的目的串中的一个字节 或字 存储单元中的数据相减 并根据相减的结果设置标志 但结果并不保存 即 SI DI 修改串指针 使之指向串中的下一个元素 当DF 0时 SI 和 DI 增量 当DF 1时 SI 和 DI 减量 3 串搜索指令SCAS语句格式 SCASB 字节串搜索SCASW 字串搜索功能 AL 字节 或AX 字 中的内容与DI所指的目的串中的一个字节 或字 存储单元中的数据相减 根据相减结果设置标志位 结果不保存 即 字节操作 AL DI 字操作 AX DI 修改指针使之指向串中的下一个元素 当DF 0时 DI 增量 当DF 1时 DI 减量 4 从源串中取数指令LODS语句格式 LODSB 从字节串中取数LODSW 从字串中取数功能 将SI所指的源串中的一个字节 或字 存储单元中的数据取出来送入AL 或AX 中 即 字节操作 SI AL 字操作 SI AX 修改指针SI 使它指向串中的下一个元素 当DF 0时 SI 增量 当DF 1时 SI 减量 5 往目的串中存数指令STOS语句格式 STOSB 往字节串中存数STOSW 往字串中存数功能 将AL或AX中的数据送入DI所指的目的串中的字节 或字 存储单元中 即 字节操作 AL DI 字操作 AX DI 修改指针DI 使之指向串中的下一个元素 当DF 0时 DI 增量 当DF 1时 DI 减量 6 重复前缀指令REPREPZREPNZ 1 REPREP前缀用在MOVS STOS LODS指令前 功能 每执行一次串指令 CX 1 直到 CX 0 重复执行结束 2 REPZ该指令一般用在CMP SCAS指令前 功能 每执行一次串指令 CX 1 并判断ZF标志是否为0 只要 CX 0或ZF 0 则重复执行结束 3 REPNZ该指令一般用在CMPS SCAS指令前 功能 每执行一次串指令 CX 1 并判断ZF标志是否为0 只要 CX 0或ZF 1 则重复执行结束 例 将22000H为首址的100个字节的数据送入首址为F3000H的存贮区中 分析 给出首地址 应采用下行 即DF 0 MOVAX 2000HMOVDS AXMOVSI 2000HMOVAX OF000HMOVES AXMOVDI 3000HMOVCX 0064H 100D 64HCLD 清OFREPMOVSB 六 控制转移指令此类指令主要通过改变CS IP的值达到改变程序运行顺序的目的 只改变IP 不改变CS 则为段内转移指令 CS与IP均改变则为段间转移 这两类指令的有直接转移和间接转移 1 无条件转移指令JMP 段内直接短转移JMPSHORT标号 IP IP Data8Data8是一个字节的补码数 范围 128 127 段内直接近转移JMPNEARPTR标号 IP IP Data16Data16是两个字节的补码数 范围 32768 32767 段内间接转移JMPWORDPTRopr IP 寄存器或存储器操作数例1 已知DS 2000H BX 0100H 20105H 0450H 若执行 JMPBX 则IP 0100 即程序转向段内偏移地址为0100H处执行 JMPWORDPTR5 BX 则IP 20000H 0100H 5H 20105H 0450H 即程序转向段内偏移地址为0450H处执行 段间直接转移JMPFARPTR远标号指令中远标号用立即数的形式指出目标位置的段地址和偏移量 CS 段地址 IP 偏移量 段间间接转移JMPDWORDPTRopr将指令要转向的目标位置的段地址和偏移量保存在存储器的4个连续的地址单元中 其中前两个字节为偏移量 后两个字节为段地址 opr为存储器地址 DWORDPTR表示存储器中储存的地址为双字 2 条件转移根据判断条件是否成立决定是否转移 按照判断条件的不同分为以下类型 单个标志 无符号数判断 有符号数判断 CX寄存器 条件转移都是段内直接短转移 即 IP IP Data8类型的转移 判断单个标志ZF JZ JE ZF 1时转移 JNZ JNE ZF 0时转移SF JS JNSOF JO JNOPF JP JNPCF JC JNC 判断无符号数的大小助记符中的意义 A 大于 B 小于 E 等于JB JNAE JNB JAE 同JC JNCJBE JNA JNBE JA 判断CFandZF 判断有符号数的大小助记符中的意义 G 大于 L 小于 E 等于JL JNGE SFxorOF 1JNL JGE SFxorOF 0JLE JNG SFxorOF andZF 1JNLE JG SFxorOF andZF 0 可见 使用比较大小的指令时 必须区分是有符号数还是无符号数 判断CX寄存器JCXZ CX 0 3 循环循环指令的转移也都是段内直接短转移 即 IP IP Data8类型的转移 LOOP判断CX是否等于零 不等于零则循环LOOPZ LOOPE 判断CX是否等于零 不等于零且ZF 1则循环LOOPNZ LOOPNE 判断CX是否等于零 不等于零且ZF 0则循环 注 由于循环计数器用CX 它为16位二进制数 因此循环次数范围1 216 65536 CX 1 循环1次 CX 0循环65536次 为了进入循环判断CX 当CX 0则进入循环 当CX 0时不进入循环 操作 CX CX 1 根据判断结果确定是否循环说明 循环指令不影响状态标志 如果目标位置的位移量超出Data8所能够表示的范围 则需要用JMP辅助来完成循环 4 子程序调用指令子程序调用指令与前面无条件转移的形式一样CALLD disp16 IP 堆栈 IP IP D 段内直接调用CALLZ IP 堆栈 IP

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论