




已阅读5页,还剩180页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章寻址方式与指令系统 3 2指令格式 3 3指令寻址方式 3 4指令系统 3 1数据类型 3 1数据类型 1 基本数据类型及其存储 存储规则 高字节数据存放在地址号高的存储单元中 低字节数据存放在地址号低的存储单元中 例 从地址号为N的存储单元存放字 双字数据96AFH 123F4CH N 5N 4N 3N 2N 1N 0AFH 96H 4CH 3FH 12H 00H 2 数据类型 图3 2数字数据类型 a 无符号整数 b 带符号整数 c 浮点数 d 字节 字 双字字符串数据型 计算机处理各种数据或完成某些其他任务都是通过执行具体指令来实现的 指令除了说明计算机做什么 还要指出数据的来源 操作结果的去向 因此 一条指令包括两部分 操作码部分和地址码部分 根据地址码部分给出的地址的个数 指令格式可分为 零地址指令 一地址指令 二地址指令 三地址指令 3 2指令格式 L OPD1 D2 D3 注释 标号 操作码助记符操作数1 操作数2 操作数3 注释 1 标号 指令的符号地址2 操作码 指令操作码的保留名 指明指令功能 3 操作数 指令操作对象 数据 地址 寄存器名及约定符号 4 注释行 说明指令在程序中的作用 操作码和操作数是指令主体 例 LOOP MOVAL 40H 取参数 3 2 1指令助记符格式 操作码 操作码用来规定计算机应该做什么样的操作 每一种操作唯一对应一个操作码 操作码由CPU设计开发人员定义 具有固定的写法和意义 MOV move传送 ADD addition交换CMP compare交换 XCH exchange交换ANL andlogic与逻辑运算 XRL exclusiveor异或MUL Multiply乘法 RR rotateright右循环SJMP shortjump短跳转 RET return子程序返回 操作数 操作数指操作的对象 1 8086指令中操作数的个数可以有以下几种情况 无操作数指 例 等待指令WAIT单操作数指令 例 加1指令INCAL双操作数指令 例 减法指令SUBAL BL 2 8086指令中的操作数根据不同的作用可分为以下两类 源操作数 一般是第二个操作数目的操作数 一般是第一个操作数例 数据传送指令MOVAL BL 一些特殊情况 例 压栈指令 PUSHAX 省略 隐含 目的操作数加1指令 INCAL 源和目的操作数一样空指令 NOP 没有操作数 3 2 2指令编码格式 图3 58086CPU指令编码的一般形式 D 0 REG域指定寄存器为源操作数 D 1 REG域指定寄存器为目的操作数 W 0 操作数为8位二进制数 字节操作 W 1 操作数为16位二进制数 字操作 MOD 方式域REG 寄存器域R M 寄存器 存储器域 MOD域和R M域所组合的寻址方式 MOD R M 例1 将指令 MOV BX DI 6 CL 写成机器码格式 解 这是一条寄存器送存储器的指令 由附录A可知该指令的格式如下 是一条3字节指令 100010DWMODREGR Mdisp8因为 REG域指出的 寄存器是源操作数 所以D 0 由CL寄存器的编码知REG 001 因为是字节操作 所以W 0 因为目的操作数是存储器且带有8位位移量 所以MOD 01 寻址方式 BX DI disp8 的R M 001 位移量为 6 其补码是11111010 因此 该指令的机器码是 100010000100100111111010 3 38086的寻址方式 寻址方式就是寻找指令或操作数的方法 涉及到的情况有两种 一种用来对操作数寻址一种用来对指令地址进行寻址 8086指令中操作数的类型 以操作数存放地点分类 可以有以下几种 立即数 操作数直接包含在指令中 例 MOVAL 50H 寄存器操作数 操作数存放在寄存器中 例 INCAL 内存操作数 操作数存放在内存单元中 例 MOVAL 2000H I O操作数 操作数来自I O端口 例 INAL 208H 3 3 1 操作数寻址方式 立即数寻址寄存器寻址存储器寻址I O端口寻址 1立即寻址 Immediateaddressing 指令中直接给出操作数 操作数紧跟在操作码之后 作为指令的一部分存放在代码段里 在取出指令的同时也就取出了操作数 立即有操作数可用 所以称之为立即寻址 立即数寻址方式 例 MOVAL 80HMOVAX 3064HADDAL 20HADDAX 1090H 注 立即数不能作目的操作数 下述各条指令源操作数的寻址方式也都是立即寻址 但这些指令都是错误的MOVAL 256 256 100H 超过了AL能存放的数的范围MOVAX 32769 32769超过了AX能存放的带符号数 补码 范围MOV100H AL 立即数不能作为目的操作数DEC20 单操作数指令不能使用立即数MOVDS 1234H 源操作数是立即数 则目的操作数就不能是段寄存器 2寄存器寻址 Registeraddressing 操作数在寄存器中 指令中指明寄存器号 这种寻址方式叫寄存器寻址 对于8位操作数 寄存器可以是AH AL BH BL CH CL DH DL 对于16位操作数 寄存器可以是AX BX CX DX SI DI SP BP CS DS ES SS 但CS不能作目的寄存器 寄存器寻址方式 例 MOVAX BX 正确 指令执行后 AX BX 但BX不变MOVAX BL 错误 源和目的的位数不相同MOVCS AX 错误 CS不能作为目的操作数MOVES DS 错误 两个操作数不能都是段寄存器 寄存器寻址的特点 1 操作数就在寄存器中 不需要访问存储器来取得操作数 指令执行时 操作就在CPU的内部进行 因而执行速度快 2 寄存器号比内存地址短 在编程中 如有可能 尽量使用这种寻址方式的指令 寄存器寻址方式既可用于源操作数 也可用于目的操作数 还可以两者都用于寄存器寻址方式 如MOVBX AX 3 存储器寻址方式 1 直接寻址方式2 间接寻址寄存器间接寻址基址加变址寻址相对的基址加变址寻址 在这类方式中 操作对象总是存放在某存储单元 指令给出了操作数在数据区的地址信息 处理器据此求出存放操作数的有效地址EA 注意这里均用方括号 EA 表示取地址所在的内容 1 直接寻址方式 DirectAddressing 说明 在讨论寻址方式时 通常把操作数的偏移地址称为有效地址EA EffectiveAddress EA可通过不同的寻址方式来得到 在直接寻址方式中 指令中直接给出操作数的有效地址 或者说 有效地址EA就在指令中 它 操作数的有效地址 而不是操作数本身 存放在代码段中指令的操作码之后 但操作数一般存放在数据段中 直接寻址方式 2 间接寻址方式 Registerindirectdressing 采用寄存器间接寻址方式时 指令中给出寄存器号 寄存器为BX BP SI和DI之一 被指定的寄存器中存放着操作数的有效地址 操作数在存储器中 以寄存器的内容为操作数的有效地址EA BX 对应段寄存器为DSEA BP SS SI DS DI DS 间接寻址方式 默认段寄存器的关系 使用BX SI DI 默认段寄存器为DS BX EA DS 10H SI DI 使用BP 默认段寄存器为SSEA SS 10H BP 用SI DI BX BP作为间接寻址允许段跨越指令中可以指定段跨越前缀来取得其他段中的数据例 MOVES DI AX ES MOV DI AXMOVDX DS BP DS MOVDX BP 这种寻址方法可以用于表格处理 3 寄存器相对寻址 Registerrelativeaddressing 操作数的有效地址EA是一个基址或变址寄存器的内容与指令中指定的8位或16位位移量 Displacement 之和 BX 8位位移量EA BP SI 16位位移量 DI 若没有段跨越前缀 则对于寄存器BX SI DI的情况 段寄存器为DS 对于寄存器为BP的情况 则段寄存器为SS 相对寻址方式 4 基址加变址寻址 Basedindexedaddressing 操作数的有效地址EA是一个基址寄存器和一个变址寄存器内容之和 两个寄存器均由指令指定 BX SI 若基址寄存器为BX 则段寄存器为DSEA BP DI 若基址寄存器为BP 则段寄存器为SS 基址变址寻址方式 5 相对基址加变址寻址 Relativebasedindexedaddress 也称 带位移量的基址加变址寻址方式 操作数的有效地址EA是一个基址寄存器和一个变址寄存器内容与8位或16位位移量之和 BX SI 用BX 则段寄存器为DSEA 位移量 BP DI 用BP 则段寄存器为SS 相对基址变址寻址方式 练习 对同一类型指令 执行速度 movAX BX快movAX 0movAX BX 慢 例2 MOVAX 1000H 若 DS 2000H 该指令执行后 AX 思考 指令MOVAX 1000H 与指令MOVAX 1000H有什么不同 内存操作数的物理地址为 PA DS 10H EA 2000H 10H 1000H 21000H执行后 AX 3040H 例3 请指出下列指令中源操作数和目的操作数的寻址方式 1 MOVSI 1202 MOV SI 1203 MOVBX BX 4 MOVAX 4 BX 5 MOVDL BX DI 2 6 MOVAL 120H 7 MOV2 BP DI AL 1 ES MOV DI CX2 DS MOVAL BP 3 MOVES DI CX4 MOVAL DS BP 5 MOVES AX 06 CS MOVCX 22H 例4判别下列指令对错 7 MOVCL AX 8 MOVAX DX 9 MOVAL CX 10 MOVCX BP BX 11 MOVAH SI DI 12 MOVBL AX CX 4 I O端口寻址 1 两种编址方式 1 统一编址方式 2 独立编址方式直接端口 0 0FFH 寻址方式 INAL 27H间接端口 0 0FFFFH 寻址方式 OUTDX AL 直接端口寻址 端口地址直接由指令给出 端口地址范围0 0FFH 256 专用指令IN OUT例 INAL 27HOUT65H AH注意 27H 65H不是立即数 而是端口地址 但是不需要 间接端口寻址 端口地址由寄存器DX给出 端口地址范围0 0FFFFH例 INAL DXOUTDX AH注意 使用专用寄存器DX DX放端口地址 所以此处不是寄存器寻址 而是寄存器间接寻址 数据的寻址方式的寻址过程 图示 指令 数据 寄存器 1 立即寻址 数据 指令 寄存器 2 寄存器寻址 数据的寻址方式的寻址过程 1 EA 数据 指令 存储器 3 直接寻址 寄存器 EA 指令 寄存器 4 寄存器间接寻址 数据 存储器 数据的寻址方式的寻址过程 2 数据 存储器 地址 寄存器 寄存器 指令 位移量 EA 5 寄存器相对寻址 数据的寻址方式的寻址过程 3 数据的寻址方式的寻址过程 4 数据 存储器 基地址 寄存器 基址寄存器 指令 变址寄存器 EA 6 基址变址寻址 变址值 寄存器 数据的寻址方式的寻址过程 5 数据 存储器 基地址 寄存器 基址寄存器 指令 变址寄存器 EA 7 基址变址相对寻址 变址值 寄存器 位移量 端口号 数据 指令 端口 8 直接寻址 DX 端口号 指令 DX 9 间接寻址 数据 端口 数据的寻址方式的寻址过程 6 端口操作数 3 3 2指令地址的寻址方式 段内寻址方式 1 段内直接寻址方式JMPdisp8 IP disp8 IP 短程跳转JMPdisp16 IP disp16 IP 近程跳转 2 段内间接寻址方式JMPMEM REG MEM REG内容 IP 2 段间寻址方式 1 段间直接寻址方式JMPaddr 指令码2 3字节 IP 指令码4 5字节 CS 2 段间间接寻址方式JMPMEM EA IP EA 2 CS 8086 8088的指令系统大致可分为6种类型 数据传送指令 算数运算指令 逻辑运算和移位指令 串操作指令 程序控制指令 处理器控制指令 3 48086CPU指令系统 3 4 1数据传送指令实现寄存器 存储器 I O端口之间的数据传送 1 通用数据传送指令 传送指令 MOVDST SRC 把一个字节或字的操作数从源地址传送至目的地址 1 最基本的传送指令MOV MOV指令的功能 MOV指令 立即数传送 movcl 4 cl 4 字节传送movdx 0ffh dx 00ffh 字传送movsi 200h si 0200h 字传送movbvar 0ah 字节传送 假设bvar是一个字节变量movwvar 0bh 字传送 明确指令是字节操作还是字操作 以字母开头的常数要有前导0 MOV指令 寄存器传送 movah al ah al 字节传送movbvar ch bvar ch 字节传送movax bx ax bx 字传送movds ax ds ax 字传送mov bx al bx al 字节传送 寄存器具有明确的字节和字类型 MOV指令 存储器传送 moval bx al ds bx movdx bp dx ss bp 0 movdx bp 4 dx ss bp 4 moves si es ds si 不存在存储器向存储器的传送指令 MOV指令 段寄存器传送 mov si ds ds si dsmovax ds ax dsmoves ax es ax ds 对段寄存器的操作不灵活CS IP不能作为目的操作数 MOV指令传送功能图解 MOV指令也并非任意传送 非法指令的主要现象 两个操作数的类型不一致无法确定是字节量还是字量操作两个操作数都是存储器段寄存器的操作有一些限制 例 判别下列指令对错 1 MOVAL 050AHMOVAX 050AH2 MOVSI DLMOVDH 0MOVSI DX 非法指令 修正为 非法指令 修正为 3 MOV BX SI 255 非法指令 修正 MOVBYTEPTR BX SI 255 BYTEPTR说明是字节操作MOVWORDPTR BX SI 255 WORDPTR说明是字操作 4 MOV 1234 5678 非法指令 修正 假设 1234 5678 是两个字变量MOVAX 5678 MOV 1234 AX 假设 1234 5678 是两个字节变量MOVAL 5678 MOV 1234 AL 5 MOVDS ES6 MOVDS 100H7 MOVCS SI 非法指令 修正为 MOVAX ESMOVDS AX 非法指令 修正为 MOVAX 100HMOVDS AX 非法指令 指令存在 但不能执行 2 堆栈操作指令 堆栈特点 后进先出 位于堆栈段中 SS段寄存器记录其段地址堆栈栈顶 用堆栈指针寄存器SP指定堆栈只有两种基本操作 进栈和出栈 对应两条指令PUSH和POP 且都是16位的字操作 1 进栈指令PUSH 进栈指令先使堆栈指针SP减2 然后把一个字操作数存入堆栈顶部 PUSHr16 m16 seg SP SP 2 SS SP r16 m16 seg 演示 pushaxpush 2000h PUSH指令的功能 2 出栈指令POP 出栈指令把栈顶的一个字传送至指定的目的操作数 然后堆栈指针SP加2 POPr16 m16 seg r16 m16 seg SS SP SP SP 2 popaxpopwvar 演示 POP指令的功能 注 堆栈操作的特点 堆栈操作的单位是字 进栈和出栈只对字量 字量数据从栈顶压入和弹出时 都是低地址字节送低字节 高地址字节送高字节堆栈操作遵循先进后出原则 但可用存储器寻址方式随机存取堆栈中的数据不能用立即寻址方式PUSH1234H目的操作数不能是CSPOPCS堆栈段是程序中不可或缺的一个内存区 常用来临时存放数据传递参数保存和恢复寄存器 保护寄存器内容 PUSHAXPUSHBXPUSHCX恢复寄存器内容 POPCXPOPBXPOPAX 例 假设 AX 2107H 执行PUSHAX SP PUSHAX执行前 SP 07H21H 低地址高地址 PUSHAX执行后 SP 07H21H POPBX执行前 SP 07H21H 低地址高地址 POPBX执行后 BX 2107H 例 POPBX 3 交换指令XCHG exchange 把两个地方的数据进行互换 目的操作数和源操作数不能均为内存单元 CS寄存器和IP寄存器不能作为交换指令的源操作数 也不能作为交换指令的目的操作数 源操作数与目的操作数都不能为立即数 XCHGreg mem reg mem reg reg mem 演示 XCHG指令的功能 例 数据交换 1 movax 1199h ax 1199h2 xchgah al ax 9911h 等同于xchgal ah3 movwvar 5566h wvar是一个字量变量4 xchgax wvar ax 5566h wvar 9911h 等同于xchgwvar ax 2 累加器专用传送指令 1 输入 输出指令格式 INAC 源操作数OUT目的操作数 AC举例 INAL 50H INAX 70H OUT44H AL OUT80H AX 注意 1 只能使用累加器传递数据 可以是8位AL 也可以是16位AX 直接端口寻址方式 寻址范围为0 0FFH 通过DX寄存器间接寻址的输入 输出指令时 寻址范围为0 0FFFFH 当I O端口与内存统一编址时 不能用输入 输出指令 可采用访问存储器的指令来访问I O端口 2 换码指令XLAT translate 将BX指定的缓冲区中 AL指定的位移处的一个字节数据取出赋给AL 换码指令执行前 在主存建立一个字节量表格 内含要转换成的目的代码表格首地址存放于BX AL存放相对表格首地址的位移量换码指令执行后 将AL寄存器的内容转换为目标代码 XLAT al ds bx al 演示 XLAT指令的功能 3 地址传送指令 地址传送指令包括3条指令 取有效地址指令LEA 将地址指针装入DS指令LDS 将地址指针装入ES指令LES 格式 LEA寄存器 源操作数LDS寄存器 源操作数LES寄存器 源操作数比较 MOVBX 1234H 与LEABX 1234H 地址传送指令的比较 已知 DS 09A0H BX 0048H LEADI BX LDSDI BX LESDI BX 等价于 MOVDI OFFSET BX 执行后 DI 0048H 执行后 DI 003EHDS 0816H 执行后 DI 003EHES 0816H 注 1 LEA指令和OFFSET运算符可以完成相同的功能 只是执行时间不同 LEABX label 程序运行时 取lable的EA到BX中MOVBX OFFSETlabel 汇编时取lable的EA 运行时放入BX中2 LDS和LES指令与LEA指令完全不同 这里是以源操作数的值做地址 取该地址处存放的双字 4个字节 作为全地址指针 分别装入DS ES 及Dst指定的16位通用寄存器 4 标志位传送指令1 标志位送AH指令 LAHF功能 将标志寄存器的低字节传送到AH寄存器中2 AH送标志寄存器指令 SAHF功能 将AH寄存器内容送到标志寄存器的低字节3 标志压栈指令 PUSHF 字 格式 PUSHF 操作 SP SP 2 SP SP 1 FR4 标志弹出指令 POPF 字 格式 POPF 操作 FR SP SP 1 SP SP 2 练习 1 判别下列指令对错 1 MOVCS 2000H2 MOV BX SI 3 MOVCL DX4 MOVAX ES BP 4 5 MOVES BX BP BX6 INAL 123H7 OUTDX BX8 PUSHAL 2 已知 DS 2000H AX 1024H DI 200H BX 100H 20200H 30H 20201H 40H 写出下列指令执行后AX寄存器的内容 1 MOVAX DI 2 MOVAX DI3 LEAAX BX DI AX 4030H AX 200H AX 300H 3 4 2算术运算指令 加法指令ADD ADC INC 减法指令SUB SBB DEC NEG CMP 乘法指令MUL IMUL 除法指令DIV IDIV 十进制调整指令DAA DAS AAA AAS AAM AAD 1 加法指令加法指令 ADDDST SRC执行操作 DST SRC DST 带进位加法指令 ADCDST SRC执行操作 DST SRC DST CF加1指令 INCOPR执行操作 OPR OPR 1 注意 除INC指令不影响CF标志外 均对条件标志位有影响 例 实现两个双字数的加法DX 0002H AX F365H BX 0005H CX F024HADDAX CXADCDX BX 加法指令对条件标志位的影响 CF位表示无符号数相加的溢出 OF位表示带符号数相加的溢出 1结果为负0否则 SF 1结果为00否则 ZF 1和的最高有效位有向高位的进位0否则 CF 1两个操作数符号相同 而结果符号与之相反0否则 OF 2 减法指令减法指令 SUBDST SRC执行操作 DST DST SRC 带借位减法指令 SBBDST SRC执行操作 DST DST SRC CF减1指令 DECOPR执行操作 OPR OPR 1求补指令 NEGOPR执行操作 OPR 0 OPR NEG指令对操作数执行求补运算 也可以表达成 将操作数按位取反后加1比较指令 CMPOPR1 OPR2执行操作 OPR1 OPR2 注意 除DEC指令不影响CF标志外 均对条件标志位有影响 比较指令CMP compare CMPDST SRC做减法运算 DST SRCCMP指令将目的操作数减去源操作数 但差值不回送目的操作数 比较指令通过减法运算影响状态标志 用于比较两个操作数的大小关系 cmpax bxcmpal 100 例CMPAX DI 若DS 3000H DI 0530H AX 1FB8H 是将AX的内容1FB8H与物理地址30530H和30531H中的数据字进行比较运算 根据结果置标志位状态 若 30530H B8H 30531H 1FH 则指令执行后 AX和上述内存单元中的操作数均不变 标志CF 0 PF 1 ZF 1 AF 0 OF 0 SF 0 减法指令对条件标志位 CF OF ZF SF 的影响 CF位表示无符号数减法的溢出 OF位表示带符号数减法的溢出 1被减数的最高有效位有向高位的借位0否则 CF 1两个操作数符号相反 而结果的符号与减数相同0否则 OF 1减法转换为加法运算时无进位0否则 CF 或 3 乘法指令无符号数乘法指令 MULSRC带符号数乘法指令 IMULSRC执行操作 字节操作数 AX AL SRC 字操作数 DX AX AX SRC ALALSRCSRCAHALDXAX 注意 AL AX 为隐含的乘数寄存器 AX DX AX 为隐含的乘积寄存器 SRC不能为立即数 除CF和OF外 对条件标志位无定义 例 AX 16A5H BX 0611H 1 IMULBL AX AL BL A5H 11H 0AF5H AX 0AF5HCF OF 1 2 MULBX DX AX AX BX 16A5H 0611H 00895EF5H DX 0089H AX 5EF5HCF OF 1 4 除法指令无符号数除法指令 DIVSRC带符号数除法指令 IDIVSRC执行操作 被除数除数商余数AXSRC 8位 ALAHDX AXSRC 16位 AXDX注意 AX DX AX 为隐含的被除数寄存器 AL AX 为隐含的商寄存器 AH DX 为隐含的余数寄存器 SRC不能为立即数 对所有条件标志位均无定义 如何判别结果有效 例 写出下列指令执行结果 MOVAX 1AC8HMOVBL 0A7H1 DIVBL 1AC8 A7 29H 09H AL 29H AH 09H2 IDIVBLA7H 39H 1AC8H 39H 78H 0AH AL 78H F8H AH 0AH 带符号数除法指令 IDIVSRC注 1 被除数和除数位数相同时 需扩展被除数位数CBWAL符号位扩展到AHCWDAX符号位扩展到DX2 余数的符号与被除数的符号一致 类型转换指令字节扩展指令CBWAL AX执行操作 若 AL 的最高有效位为0 则 AH 00H若 AL 的最高有效位为1 则 AH FFH字扩展指令CWDAX DX AX 执行操作 若 AX 的最高有效位为0 则 DX 0000H若 AX 的最高有效位为1 则 DX FFFFH例 AX 0BA45HCBW AX 0045HCWD DX 0FFFFH AX 0BA45H注意 无操作数指令 隐含对AL或AX进行符号扩展 不影响条件标志位 符号扩展指令 注意 该指令用于两个符号数相除之前 产生一个双倍长度的被除数 无符号被除数长度加倍的零扩展 高位直接补0 不影响标志位 0 AL 0 AX 0 0 0 0 0 0 0 0 CBW 1 AL 1 AX 1 1 1 1 1 1 1 1 CBW 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 CWD 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 D AX AX AX AX DX DX CWD 例 x y z v均为16位带符号数 计算 v x y z 540 x MOVAX XIMULY x y DX AX MOVCX AXMOVBX DXMOVAX ZCWD Z DX AX ADDCX AXADCBX DX x y z BX CX SUBCX 540SBBBX 0 x y z 540MOVAX VCWD V DX AX SUBAX CXSBBDX BX v x y z 540 IDIVX v x y z 540 x AX 余数 DX 5 BCD码调整指令BCD码 用二进制编码的十进制数 又称二 十进制数压缩的BCD码 用4位二进制数表示1位十进制数例 59 10 01011001 BCD非压缩的BCD码 用8位二进制数表示1位十进制数例 59 10 0000010100001001 BCD数字的ASCII码是一种非压缩的BCD码DIGITASCIIBCD030H00110000131H00110001232H00110010 939H00111001 问题的提出 19压缩BCD 00011001 2700100001 110 08 00001000 00100111 BCD AF 1 调整指令格式 DAA 对两个组合式BCD码相加结果进行调整AAA 是对两个分离式BCD码相加结果进行调整DAS 对两个组合式BCD码相减结果进行调整AAS 对两个分离式BCD码相减结果进行调整AAM AL内容调整为分离BCD数AAD AX中的分离BCD数调整为二进制数 压缩BCD码加法调整指令 DAA格式 DAA功能 将AL中二进制加法运算结果调整为两位压缩型十进制数 结果仍放在AL中 AL中的运算结果在下列两种情况下要进行调整 1 当运算结果中出现非法码 1010B 1111B 2 本位向高位 指BCD码 有进位调整方法 DAA是二进制数加法结果AL中低4位大于9或辅助进位位AF 1时 则应对AL低4位进行加6修正 当AL中高4位大于9或进位位CF 1时 则应对AL高4位进行加6修正 注 只能按字节进行运算和调整 例480100100029 001010017701110001AF 1 低位需要 6调整 011001110111660110011092 1001001015811111000高位出现非法码 需要 6调整 0110101011000981001100077 01110111175100001111低位出现非法码 需要 6调整 01100110CF 1 高位需要 6调整101110101 说明 1 调整指令不能单独使用 只能跟在相应的运算指令后例如 ADDAL BX DAA AL中的内容为BCD数2 调整指令仅对字节运算指令有效 对于多字节的十进制运算 只能从低字节开始 逐个字节的进行运算和调整 例 AX 6698H BX 2877H 求两压缩BCD数之和并存放在CX中 ADDAL BLDAAMOVCL ALMOVAL AHADCAL BHDAAMOVCH AL 低字节相加 AL 0FH CF 1 AF 0 AL AL 66H 75H CF 1 AF 1 CL 75H 高字节相加 AL 66H 28H 1 8FHCF 0 AF 0 AL 66H AL AL 06H 95H CF 0 AF 1 CH 95H 压缩BCD码调减法调整指令 DAS SUB SBBAL REG MEM 立即数DAS 把AL内容调整成压缩BCD数 若AL低4位 9 或AF 1 则 AL 06H AF 1 若AL高4位 9 或CF 1 则 AL 60H CF 1 注 只能按字节进行运算和调整 分离BCD数加法调整指令 AAA 注 1 只能按字节进行运算和调整2 运算结果以分离BCD码形式存放于AX寄存器 AH的内容为低字节相加的进位 ADD ADCAL REG MEM 立即数AAA 把AL内容调整成分离BCD数调整方法 若AL低4位 9 或AF 1 则 AL AL 06H AH AH 1 AF 1 CF 1若AL低4位 9且AF 0 AL AL AL高4位清零 分离BCD数加法调整指令 AAS 注 1 只能按字节进行运算和调整2 运算结果以分离BCD码形式存放于AX寄存器 AH的内容为低字节相减的借位 SUB SBBAL REG MEM 立即数AAS 把AL内容调整成分离BCD数调整方法 若AL低4位 9 或AF 1 则 AL AL 06H AH AH 1 AF 1 CF 1若AL低4位 9且AF 0 AL AL AL高4位清零 乘法的分离式BCD码调整指令 AAM格式 AAM功能 将AL中二进制乘法运算结果调整为2位非压缩型BCD码 通常在MUL指令之前安排两条AND指令 以确保参加乘法运算的操作数为非压缩型BCD码 为完成一位十进制数的乘法运算应安排下列4条指令 ANDAL 0FHANDBL 0FHMULBLAAM AL 10商AH 余数AL 注 单字节分离BCD码才能进行乘法运算 除法的分离式BCD码调整指令 AAD格式 AAD功能 将累加器AX中的二位非压缩型BCD码的被除数调整为二进制数 保留在AL寄存器中 AH 10 AL AL 注意 除法的调整指令操作是在除法运算之前进行 先对非压缩型十进制数的被除数进行调整操作 将其调整为二进制数 然后进行二进制的除法运算 即可得到十进制的商和余数 例 现将两数相除 商保留在AL 余数保留在AH 指令 ANDBL 0FHANDAX 0F0FHAAD 在DIV之前调整DIVBL 00110110 00110101 00111001 被除数15870 AX 65 除数70 BL 9 3 4 3逻辑运算和移位指令 1 逻辑运算指令ANDdest src 用于把操作数某位清0ORdest src 用于把操作数某位置1NOTdest 用于操作数的求反运算XORdest src 用于对某些位求反 某些位不变TESTdest src 用于程序转移 后接JZ JNZ注 NOT指令不影响标志位 其余4条指令设置CF OF 0 操作结果仅影响SF ZF PF标志位 例 设 AX 01001110B 求下列指令执行后AX寄存器的内容 1 ANDAX 10001100B 2 ORAX 10001100B 3 NOTAX 4 XORAX 10001100B 5 TESTAX 10001100B AX 00001100B 00001100B 11001110B 11000010B AX 11001110B AX 10110001B AX 11000010B AX 10001100B 例 屏蔽AL的第0 1两位ANDAL 0FCH例 置AL的第5位为1ORAL 20H例 使AL的第0 1位变反XORAL 3例 测试某些位是0是1TESTAL 1JZEVEN OR00100000 1 01XOR00000011 10 AND11111100 00 AND000000010000000 2 移位指令 指令格式 指令助记符REG MEM 1指令助记符REG MEM CL CL内容为移位次数1 非循环移位指令算术左移指令SAL逻辑左移指令SHL算术右移指令SAR逻辑右移指令SHR2 循环移位指令循环左移指令ROL循环右移指令ROR带进位循环左移指令RCL带进位循环右移指令RCR 1 逻辑左移指令SHL SHLreg mem 1 CL reg mem左移1或CL位 最低位补0 最高位进入CF 演示 SHL和SAL指令的功能 2 逻辑右移指令SHR SHRreg mem 1 CL reg mem右移1 CL位 最高位补0 最低位进入CF 演示 SHR指令的功能 3 算术左移指令SAL SALreg mem 1 CL 与SHL是同一条指令 演示 SHL和SAL指令的功能 4 算术右移指令SAR SARreg mem 1 CL reg mem右移1 CL位 最高位不变 最低位进入CF 演示 SAR指令的功能 5 循环左移指令ROL6 循环右移指令ROR7 带进位循环左移指令RCL8 带进位循环右移指令RCR 演示 演示 演示 演示 ROL指令的功能 ROR指令的功能 RCL指令的功能 RCR指令的功能 例 数据移位 MOVDX 6075H DX 0110000001110101BSHLDX 1 DX 1100000011101010B CF 0 SF 1 ZF 0 PF 0SARDX 1 DX 1110000001110101B CF 0 SF 1 ZF 0 PF 0SHRDX 1 DX 0111000000111010B CF 1 SF 0 ZF 0 PF 1MOVCL 4 CL 4 标志不变SARDX CL DX 0000011100000011B CF 1 SF 0 ZF 0 PF 1 DX 0000011100000011B CL 4RORDX 1 DX 1000001110000001B CF 1 SF 1 ZF 0 PF 1ROLDX CL DX 0011100000011000B CF 0 SF 0 ZF 0 PF 1STC CF 1RCLDX 1 DX 0111000000110001B CF 0 SF 0 ZF 0 PF 0RCRDX 1 DX 0011100000011000B CF 1 SF 0 ZF 0 PF 1 例 将AL寄存器中的无符号数乘以10 XORAH AH 实现AH 0 同时使CF 0SHRAX 1 AX 2 ALMOVBX AX BX AX 2 ALSHLAX 1 AX 4 ALSHLAX 1 AX 8 ALADDAX BX AX 8 AL 2 AL 10 AL 逻辑左移一位相当于无符号数乘以2逻辑右移一位相当于无符号数除以2 例 32位数据移位 将DX AX中32位数值左移一位SHLAX 1RCLDX 1 考虑32位数据的右移等操作 例 AX 0012H BX 0034H 把它们装配 AX 1234H 例 BX 84F0H 1 BX 为无符号数 求 BX 2SHRBX 1 BX 4278H 2 BX 为带符号数 求 BX 2SALBX 1 BX 09E0H OF 1 3 BX 为带符号数 求 BX 4MOVCL 2SARBX CL BX 0E13CH MOVCL 8ROLAX CLADDAX BX MOVCH 4 循环次数MOVCL 4 移位次数NEXT ROLBX CLMOVAX BXANDAX 0FHPUSHAXDECCHJNZNEXT 0008 0004 000F 0000 SP 3 BX 84F0H 把 BX 中的16位数每4位压入堆栈 3 4 4串操作指令 指令格式 重复前缀指令字符串指令注 1 是指令系统中唯一能在存储器源 目的操作数之间进行操作的指令 对向量和数组操作提供了很好的支持 2 源串逻辑地址DS SI 加段前缀可修改所在段目的串逻辑地址ES DI 不能改变所在段3 字符串中元素个数CX 每执行一次字符串指令 CX 1CX 当 CX 0 停止执行 4 DF 0 低地址高地址方向处理字符串DF 1 高地址低地址方向处理字符串5 重复的字符串处理过程可被中断 对字节串 字串 SI 1 2SI DI 1 2DI 对字节串 字串 SI 1 2SI DI 1 2DI 1 重复前缀指令 REP 当CX 0时 重复执行 常与MOVS STOS连用 REPE REPZ 当CX 0且ZF 1时 重复执行 常与CMPS连用 当CX 0或ZF 0时 停止执行 REPNE REPNZ 当CX 0且ZF 0时 重复执行 常与SCAS连用 当CX 0或ZF 1时 停止执行 注 1 前缀本身不是独立的指令 它没有操作数 不能单独使用 必须加在某条串指令之前 以控制真正串指令的执行次数 2 计数值必须事先存入CX中 其值可自动修改 MOVS串传送指令 将数据段中的整串数据传送到附加段中 源串 数据段 目的串 附加段 DS SI ES DI MOVSB 字节 MOVSW 字 字节操作 SI SI 1 DI DI 1字操作 SI SI 2 DI DI 2方向标志DF 0时用 DF 1时用 2 字符串指令 执行REPMOVS之前 应先做好 1 源串首地址 末地址 SI 2 目的串首地址 末地址 DI 3 串长度 CX 4 建立方向标志 CLD使DF 0 STD使DF 1 SI DI 数据段附加段 SI DI 例 把DS 2000H的256个字节传送到ES 4000H中 MOVSI 2000HMOVDI 4000HMOVCX 100HCLD DF 0REPMOVSB 2 CMPS串比较指令 将原串与目的串进行比较源串 数据段 目的串 附加段 DS SI ES DI CMPSB 字节 CMPSW 字 根据比较结果置条件标志位 相等ZF 1不等ZF 0字节操作 SI SI 1 DI DI 1字操作 SI SI 2 DI DI 2 例 比较以DS 2000H ES 4000H为首地址的两个256字节的字符串是否相等 MOVSI 2000HMOVDI 4000HMOVCX 100HCLD DF 0REPZCMPSBJZEQUELNE 两字符串不等处理程序EQUEL 两字符串相等处理程序 3 SCAS串检索指令 在字符串中查找一个与已知数值相同或不同的元素 SCASB 字节 SCASW 字 待搜索字节 字AL AX ES DI所在单元的数与AL AX比较 DF 0 1 DI 1 2DI CX 1CX 当CX 0且ZF 0时 重复执行 例 从一个字符串中查找一个指定的字符messdb COMPUTER LEADI messMOVAL T MOVCX 8CLDREPNESCASB C O M P U T E R DI 4 LODS取字符串指令 LODS 字节 LODW 字 功能 DS SI所在单元的数AL AX DF 0 1 SI 1 2SI 5 STOS存入串指令 STOSB 字节 STOSW 字 功能 将AX AL中数送到ES SI所指向的单元中 修改SI内容指向下一个元素 执行操作 字节操作 DI AL DI DI 1字操作 DI AX DI DI 2 例 试把DS 2000H寻址的长度为100的字符串 每一字符 1后存入ES 1000H为首的单元中 MOVSI 2000HMOVDI 1000HMOVCX 64HCLDCIRCLE LODSBINCALSTOSB DECCXJNZCIRCLE 相当于 MOVES DI ALINCDI 3 4 5控制转移指令转移指令通过改写PC的当前值 从而改变CPU执行程序的顺序 使程序发生跳转 8086CPU有5种转移指令 无条件跳转指令条件跳转指令循环控制指令子程序调用和返回指令中断指令 1 无条件跳转指令 指令格式 JMP目标地址举例 JMPSHORTMULTI JMPNEARPRTMULT2 JMPCX JMPFARPTRMULT3 JMPDWORDPTR SI 注 指令的执行结果不影响标志位 无条件转移指令 段内直接短转移 JMPSHORTOPR执行操作 IP IP 8位位移量段内直接近转移 JMPNEARPTROPR执行操作 IP IP 16位位移量段内间接转移 JMPWORDPTROPR执行操作 IP EA 段间直接远转移 JMPFARPTROPR执行操作 IP OPR的段内偏移地址 CS OPR所在段的段地址段间间接转移 JMPDWORDPTROPR执行操作 IP EA CS EA 2 2 条件跳转指令 条件跳转指令可分为三类 简单条件跳转指令带符号数条件跳转指令无符号数条件跳转指令注意 1 所有的条件跳转指令均是位移量为8位的段内相对寻址方式 2 用于设计分支程序结构 1 根据单个条件标志的设置情况转移格式测试条件JZ JE OPRZF 1JNZ JNE OPRZF 0JSOPRSF 1JNSOPRSF 0JOOPROF 1JNOOPROF 0JPOPRPF 1JNPOPRPF 0JCOPRCF 1JNCOPRCF 0 2 比较两个无符号数 并根据比较结果转移 格式测试条件 JB JNAEOPRCF 1 JNB JAEOPRCF 0 JBE JNAOPRCF ZF 1 JNBE JAOPRCF ZF 0 适用于地址或双精度数低位字的比较 3 比较两个带符号数 并根据比较结果转移 格式测试条件 JL JNGE OPRSF OF 1 JNL JGE OPRSF OF 0 JLE JNG OPR SF OF ZF 1 JNLE JG OPR SF OF ZF 0 适用于带符号数的比较 4 测试CX的值为0则转移格式测试条件JCXZOPR CX 0 例 如果X 50 转到TOO HIGH 否则 X Y RESULT 如果溢出转到OVERFLOW JGJOJNS 例 是双精度数 分别存于DX AX及BX CX中 时转L1 否则转L2 CMPDX BXJGL1JLL2CMPAX CXJGL1L2 L1 3 循环指令 注意 CX中存放循环次数 只能使用段内直接寻址的8位位移量LOOPLOOPZ LOOPELOOPNZ LOOPNE执行步骤 1 CX CX 1 2 检查是否满足测试条件 如满足则 IP IP 8位位移量 实行循环 不满足则IP不变 退出循环 循环指令 LOOPOPR测试条件 CX 0为零或相等时循环指令 LOOPZ LOOPE OPR测试条件
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国五金挂钩行业投资前景及策略咨询研究报告
- 2025至2030中国资产证券化行业发展趋势分析与未来投资战略咨询研究报告
- 2025至2030中国卡车床罩行业发展趋势分析与未来投资战略咨询研究报告
- 2025至2030中国单座海边车行业发展趋势分析与未来投资战略咨询研究报告
- 2025至2030中国保修管理软件行业发展趋势分析与未来投资战略咨询研究报告
- 2025至2030中国体育器材网上零售行业发展趋势分析与未来投资战略咨询研究报告
- 2025至2030中国企业管理软件行业发展趋势分析与未来投资战略咨询研究报告
- 2025至2030中国云中的地理信息系统行业发展趋势分析与未来投资战略咨询研究报告
- 2025至2030中国个人应用程序(A2P)SMS和API行业发展趋势分析与未来投资战略咨询研究报告
- 2025至2030中国下水道检查摄像系统行业发展趋势分析与未来投资战略咨询研究报告
- 前程无忧测评题库及答案
- 医疗纠纷处理有关法律问题讲座(医生)
- 划船休闲体育活动策划
- 信息类文本阅读(信息的概括) 基础练 2025年高考语文一轮复习备考
- 老年科人文关怀护理
- 物业中秋博饼活动方案
- 中考生物基础知识填空含答案
- 叙事护理学智慧树知到答案2024年中国人民解放军海军军医大学
- DB65-T 4747-2024 地表水自压滴灌工程设计规范
- 2024小学语文教学及说课课件:六年级上册《只有一个地球》
- 2023年甘肃兰州中考满分作文《唤起心中的勇敢》
评论
0/150
提交评论