




已阅读5页,还剩217页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章 8086指令系 统3-1 8086 的寻址方式 3-2 指令的机器码表示方法 3-3 8086指令系统 一、数据传送指令 二、算术运算指令 三、逻辑运算、移位、循环指令 四、串操作指令 无、控制转移指令 六、处理器控制指令 七、指令的执行时间和软件延时 第三章小结 重 点 b8086的寻址方式 b8086指令系统 3-1 8086 的寻址方式 b计算机的指令包含操作码和操作数,操作 码指明指令的操作性质,操作数指明操作 的对象。 例: MOV AX,BX 操作码 操作数 b寻址方式就是指令中确定操作数的方法, 操作码在 3-3 中介绍。 b指令通常涉及执行前与执行后的数据,执 行前的称为源操作数,执行后的结果称为 目的操作数。 MOV AX,BX 源操作数 目的操作数 b指令有单操作数、双操作数以及隐含操作 数之分。单操作数的源和目的相同;双操 作数用“,”分隔,左边为目的,右边为源; 隐含操作数不在指令码中指明,而是预先 规定死的。 b从数学角度来说,操作数分为常数与变量 两类。常数是指程序运行过程中数值保持 不变的数,变量是指程序运行中数值可以 改变的量。 b计算机中能够存放操作数的有寄存器和存 储器,而存储器又分为程序与数据两种。 b寄存器中的内容可在程序运行中改变。 b数据RAM单元的值在程序运行中可以改变的 。 b程序通常存放在ROM中,存放在代码段,由 CS管理,运行中不会改变。 数据传送指令 MOV目的,源 操作: 将源操作数的值复制到目的操作数 中,原操作数保持不变 一、立即数寻址 b立即数是直接包含在指令中的8位或16位的 常数,程序编译完成后,其值在运行过程 中不变,是软件处理常数的最广泛的方法 。 b立即数是指令码的一部分,紧跟在操作码 之后存放在代码段。执行时,EU从指令队 列中获得该操作数。 b若是16位数据,则低字节存放在低地址单 元中,高字节存放在高地址单元中。 b立即数只能做源操作数,不能做目的。 b以AF打头的立即数,前面加0,以与其它 字符区别开来。 外部总线 内部暂存器 IP ES SS DS CS 输入/输出 控制电路 执行部分 控制电路 1 2 3 4 5 6 ALU 标志寄存器 AH AL BH BL CH CL DH DL SP BP SI DI 通用 寄存 器 地址 加法 器 指令队列缓冲器 执行部件 (EU) 总线接口部件 (BIU) 16位 20位 16位 8位 例: MOV AL,80H MOV AH,0ABH MOV AX,1234H 操作码 34H 12H 寄存器与立即数两种寻址方式不需要计算存储单元地址,执 行速度最快。 二、寄存器寻址 b以寄存器的内容作为操作数。 b16位寄存器:AX,BX,CX,DX,SI,DI,BP ,SP。 b8位寄存器:AH,AL,BH,BL,CH,CL,DH ,DL。 b寄存器既能做源操作数,又能做目的。 例: MOV AL,AH;AL AH MOV DX,1234H;DX = 1234H 存储器操作数的寻址 b对于存放在数据存储器中的操作数,要确定其物理 地址,然后由BIU从指定的单元中读取操作数的值 ,送到EU中运算,执行速度较慢。 b要计算物理地址,需要确定其逻辑地址。段基址通 常是默认(隐含的、缺省的、预先规定)的,也可 以是指令中指定的。 b在IBM PC机中,偏移地址被称为有效地址EA。不同 的存储器寻址方式之间的区别在于确定有效地址的 方法不同。 b注意概念:物理地址、逻辑地址、段基址、段内偏 移地址、有效地址 外部总线 内部暂存器 IP ES SS DS CS 输入/输出 控制电路 执行部分 控制电路 1 2 3 4 5 6 ALU 标志寄存器 AH AL BH BL CH CL DH DL SP BP SI DI 通用 寄存 器 地址 加法 器 指令队列缓冲器 执行部件 (EU) 总线接口部件 (BIU) 16位 20位 16位 8位 三、直接寻址方式 b在指令中以常数形式直接给出操作数的16位 有效地址EA,EA作为指令码的一部分,紧跟 操作码存放在代码段中。EA要用 括起来, 以与立即数区分。 b有效地址EA的存储顺序与16位立即数相同, 低字节存放在低地址单元中,高字节存放在 高地址单元中 b指令执行时,BIU从指令队列中获得EA。 b段基址的默认值是DS。 例: 设 DS=5000H MOV AX,4321H 操作码 21H 43H 内容物理地址 54322H 54321H 54320H 90H 78H 56H ALAH 1. 操作数物理地址:PA = DS 16 + EA = 54321H 2. 操作数为字数据,PA对应低字节所在单元,该单元内容 AL, 3. (PA+1)对应高字节单元,该单元内容AH, 4. 结果:AX = 9078H 7890 段超越 b如果直接寻址的数据不在DS段中,则要在 指令中使用段超越前缀指明段的名称。 b例如对附加段的寻址,在有效地址前用“ES: ”标明。“:”是属性修改运算符,表示计算 物理地址时,不再使用缺省的DS,而改用 ES。 例: MOV AL,ES:3024H PA= ES 16 + 3024H 符号地址 b在汇编语言中,可以事先把一个存储单元 的有效地址定义为一个符号,在程序中使 用符号地址而不直接使用数值地址。 b定义字节数据用DB,定义字数据用DW。 例:例: ARRAY1ARRAY1DWDW0506H0506H MOVMOV AXAX,ARRAY1ARRAY1;AX=0506HAX=0506H 对符号地址,可以不加 ,等价于直接寻址。 MOVMOV AXAX,ARRAY1 = MOVARRAY1 = MOVAXAX,ARRAY1ARRAY1 四、寄存器间接寻址 b以某个16位寄存器的内容作为存储器操作数 的有效地址。 b可用于间接寻址的寄存器只能是两个基址寄 存器BX、BP ,以及两个变址寄存器SI、DI。 b间接寻址的寄存器要用 括起来,以与寄存 器寻址方式区别。 有“取有效地址”的含义 。 b默认的段基址,BP SS,BX、SI、DI DS b也可以使用段超越前缀指定非缺省的段基址 。 例:设例:设 AX=0102HAX=0102H,BX=2346HBX=2346H, DS=1000HDS=1000H,ES=2000HES=2000H MOVMOV AXAX,BX BX 1. 由地址加法器生成源操作数物理: PA = DS 16 + EA = 10000H + 2346H = 12346H 2. 取物理地址为12346H的字数据送AX中,即取( 12346H)单元的内容送AL中,(12347H)单元 的内容送到AH中。 3. AX=3344H 33H 44H 12346H 1、以BX寄存器进行间接寻址 数据段基址寻址 例: 若 DS = 2000 H,ES = 3000 H,BX = 1000 H 1)MOV AX,BX AX (21000 H) (21001 H) AX = 5 B 4 0 H MOV CX,ES:BX AX (31000 H) (31001 H) 40 5B 21000 H 21001 H 2、以BP寄存器进行间接寻址堆栈段基址寻址 MOV AX,BP 若 SS = 5000 H,BP = 3020 H, 将 53020 H、53021 H 单元的内容送 AX。 执行结果: AX = 4A56 H 34000 H 34001 H 1A H 20 H 56 H 4A H 53020H 53021H 3、以SI、DI寄存器进行间接寻址变址寻址 1) MOV AX,ES : SI 若 ES = 3000 H,SI = 4000 H, EA=4000H,物理地址=34000H, 执行结果: AX=201A H 2)MOV BX,DI 若 DS = 0FFF0 H,DI = 0200 H 执行结果:BX (?)(?) 20H 32H 00100H 00101H BX = 3220 H PA=DS x 10H + DI =0FFF00H + 0200H =100100H 最高位(D20)的 “1” 自然丢失, 实际物理地址为PA=00100H 五、寄存器相对寻址 b操作数的有效地址是一个基址或变址寄存器 的内容与一个8位或16位位移量的和。 b默认的段基址由寄存器决定,BP SS,BX 、SI、DI DS b也可以使用段超越前缀指定非缺省的段基址 。 例:例: MOVMOV AXAX,BX + 12HBX + 12H MOVMOV ALAL,COUNT BPCOUNT BP MOVMOV BXBX,ESES: ARRAYDIARRAYDI b寄存器相对寻址的物理地址形成分两步进 行。 b第一步计算有效地址EA,这一步在执行部 件EU中完成,需要注意的是,EA的计算是16 位数据运算,通过16位内部总线传送,超过 16位的数据会自然丢失。 b第二步是根据EA和段基址计算物理地址, 这一步在地址加法器中完成。 例:设DS=2000H,BX=0AB00H,ARRAY=0F000H MOV AL,BX+12H EA = BX + 12H = 0AB00H + 12H = 0AB12H PA = DS 10H + EA = 20000H +0AB12H = 2AB12H MOV AL,ARRAYBX EA = BX + ARRAY = 0AB00H + 0F000H = 1 9B00H 产生进位,而EA只能取低16位,故EA=9B00H PA=DS 10H + EA = 20000H + 9B00H = 29B00H 六、基址变址寻址 b操作数的有效地址是一个基址寄存器(BX,BP) 与一个变址寄存器(SI,DI)的内容之和。 b默认的段由基址寄存器决定,BP SS,BX DS ,也可以使用段超越前缀指定非缺省的段基址。 b注意计算EA时的进位的自然丢失。 例:例: MOVMOV AXAX,BX +SIBX +SI;EA = BX + SIEA = BX + SI,段,段=DS=DS MOVMOV ALAL, BP DIBP DI;EA = BP + DIEA = BP + DI,段,段= = SSSS MOVMOV BXBX,ESES: BX DIBX DI ;EA = BX + DIEA = BX + DI,段,段= = ESES 七、相对基址变址寻址 b操作数的有效地址是一个基址寄存器(BX,BP) 与一个变址寄存器(SI,DI)的内容之和,再加上 一个8位或16位的位移量。 b默认的段由基址寄存器决定,BP SS,BX DS ,也可以使用段超越前缀指定非缺省的段基址。 b注意计算EA时的进位的自然丢失。 例:例: MOVMOV AXAX,BX +SI+12HBX +SI+12H ;EA = BX + SI + 12HEA = BX + SI + 12H,DSDS MOVMOV ALAL, BUFBP DIBUFBP DI ;EA = BP + DI + BUFEA = BP + DI + BUF,SSSS MOVMOV BXBX,ES:ARYBX DI ES:ARYBX DI ;EA = BX + DI +ARYEA = BX + DI +ARY,ESES 例:若 BX = 5000 H,SI =2000 H,DS =4000 H, SS = 1000 H,BP = 3100 H。 则: MOV AX,BX+SI; EA=5000+2000=7000H AX 47001 H 47000 H AX = 2A32 H MOV AX,BP + SI + 0020 H; EA=3100+2000+0020=5120H 例:设 BX = 0158 H,DI = 10A5 H,DS = 2100 H,位 移量 = 1B57 H,DS 作为操作数的段寄存器。 1)直接寻址: MOV AX,1B57 H 有效地址 = 1B57 H 物理地址 = 21000 H+1B57 H = 22B57 H 2)寄存器间接寻址: MOV AX,BX 有效地址 = 0158 H 物理地址 = 21000 H + 0158 H = 21158 H 3)BX寄存器相对间接寻址: MOV AX,BX+1B57H 有效地址 = 0158 H + 1B57 H = 1CAF H 物理地址 = 21000 H + 1CAF H = 22CAF H 4)变址寻址: MOV AX,DI 有效地址 = 105A H 物理地址 = 21000 H+105A H = 220A5 H 5)DI寄存器相对变址寻址: MOV AX,DI+1B57H 有效地址 = 105A H + 1B57 H = 2BFC H 物理地址 = 21000 H + 2BFC H = 23BFC H 6)基址加变址的寻址 : MOV AX,BX + DI 有效地址 = 0158 H+105A H = 11FD H 物理地址 = 21000 H + 11FD H = 221FD H 7)相对的基址加变址的寻址: MOV AX,BX + DI+1B57 H 有效地址 = 0158 H+105A H + 1B57 H = 2D54 H 物理地址 = 21000 H + 2D54 H = 23D54 H 寄存器寻址: 指令中给出寄存器,操作数是该寄存器的内容 寄存器数 据 指令 寄存器 指令 内存 EA数 据 直接寻址: 指令中以常数形式直接给出操作数的有效地址 指令 寄存器 内存 寄存器数据EA 寄存器间接寻址: 指令中给出寄存器,该寄存器值作为存储单元的有 效地址,操作数是该存储单元的内容。 指令 寄存器 位移量 地址 + 数据 寄存器 内存 寄存器相对寻址: 指令中给出寄存器以及相对位移量,以该寄存器值 于位移量的和作为存储单元的有效地址,操作数是 该存储单元的内容。 基址寄存器 变址寄存器变址值 基址值 + 数据 内存 指令 基址加变址寻址 指令中给出基址寄存器以及变址寄存器,以两个寄 存器值的和作为存储单元的有效地址,操作数是该 存储单元的内容。 基址寄存器 变址寄存器 位移量 指令 变址值 基址值 数据 内存 + 相对的基址加变址 指令中给出基址寄存器、变址寄存器以及相对位 移量,以三者的和作为存储单元的有效地址,操 作数是该存储单元的内容。 八、其它 1、隐含寻址 指令中不显性指明操作数,此类指令的操作 数是预先规定的,称为隐含寻址方式。 例:例: MOVMOV AXAX,BX +SI+12HBX +SI+12H ;EA = BX + SI + 12HEA = BX + SI + 12H,DSDS 源操作数:源操作数:相对基址变址寻址方式相对基址变址寻址方式 目的操作数:寄存器寻址方式目的操作数:寄存器寻址方式 例:例:STCSTC;CF CF 1 1 DAADAA;对;对ALAL中数据进行十进制加法调整中数据进行十进制加法调整 2、每个操作数都有对应的寻址方式,双操作 数的指令就可能有两种寻址方式 思考题 已知: DS=22A7H,SS=0FE20H,ES=0BBA2H, CS=3400H,BX = 2013H,BP =4215H,SI = 312EH, DI = D055H, 试写出下面每条指令中存储器操作数的物 理地址。 1、MOV BX,4800H 2、ADD SS:BX+DI+7650H,AL 3、SUB BP+SI+3,CX 4、XCHGAX,DI+5 3-2 指令的机器码表示方法 一、机器语言指令的编码目的和特点 1、机器语言指令 CPU只能识别和执行二进制机器码指令。 2、机器语言指令的编码特点 一般通过查表即可找到对应的机器码; 指令机器码有单字节、双字节、多字节之 分,8086 CPU最长指令有 6 字节。 二、 机器语言指令代码的编 制 b8086 的指令为 1 6字节,分为“操作码域”和“操 作数域”两个部分; b1、操作码域: 一般用指令的第一个字节或者头两个字节表 示指令的操作码和寻址方式操作码域。 b2、操作数域: 操作码域后面所跟的字节一般统称为操作数域 单字节指令(隐含的操作数) 单字节指令(寄存器模式) 寄存器到寄存器 不带位移量的寄存器和内存之间的传送 带位移量的寄存器和内存之间的传送(设位移量为 16 位) 立即数送寄存器(设立即数为 16 位) 立即数送内存(设带 16 位位移量) 图 3 - 3 8086 指令格式举例 操作码 操作码 REG 操作码 操作码 操作码 操作码 操作码 11 REG R/M MOD REG R/M MOD REG R/M 11 REG R/M MOD 操作码 R/M 位移量低位位移量高位 位移量高位位移量低位 数据低位数据高位 数据高位数据低位 REG寄存器 MOD模式 R/M寄存器或内存 操作码:指出执行这条指令时,CPU 要做什么操作。 (OP)一般用指令的一个字节表示,有时 由于用 8 位还不够,常在指令的第二个字节 中还可占有 3 位操作码。 指令的第一字节: w d 立即方式寻址时,操作码中用 S 位表示符号扩展 s=1,将 8 位立即数扩展成 16 位数时 OP d/s w w=1,对字进行操作 w=0,对字节进行操作 d=1,寄存器作为目的操作数 d=0,寄存器作为源操作数 2、操作数域:操作码域后面所跟的字节一般统 称为操作数域。 2 字节的有效地址(直接寻址); 1 字节或者 2 字节的位移量; 1 字节或者 2 字节的立即数; 1 字节或者 2 字节的位移量,后面再跟 1 字节或者 2 字节 的立即数; 2 字节的位移量和 2 字节的段地址(只对段间 接转移而言)。 单操作数指令 双操作数指令 指令: 例:指令编码 字节1字节2字节3字节4字节5字节6 C 78 70 02 15 0F A MOVMOVBX+2100HBX+2100H,0FA50H0FA50H 操作码 两字节 位 移 量 低 字 节 位 移 量 高 字 节 立 即 数 低 字 节 立 即 数 高 字 节 C 7 8 7 0 0 2 1 5 0 F A 0 1 2 3 4 5 指令地址 b指令在存储器中的地址,是指该指令第一 个字节所在存储单元的地址; b其段基址由CS确定,段内偏移地址由IP决 定 b每执行完一条指令后,IP的值指向下一条指 令的首地址。IP的值不是连续变化的,每次 变化按照一条指令的字节数变化; bCS : IP的改变是通过专门的指令跳转类 指令来实现。 3-3 8086指令系统 b数据传送指令 b算术运算指令 b逻辑运算、移位、循环指令 b串操作指令 b控制转移指令 b处理器控制指令 一、数据传送指令 bMOV XCHG bXLAT bPUSHPOP bLEALDSLES bPUSHFPOPF bLAHF SAHF bIN OUT 1. 数据传送实际上是复制操作,因此源操作数保持不变。 2. 除SAHF和POPF两条指令外,其它传送指令都不影响标志 寄存器的标志位。 1.通用型 (1)MOV传送指令 格式:MOV dst,src ; dst src 1. 源和目的数据长度相等。 2. 至少有一个操作数能指定是字节数据还是字数据 3. 立即数只能做源操作数,不能做目的。 4. 立即数不能直接传送到段寄存器,不能在两个段 寄存器,或者两个存储单元之间直接传送。 5. CS与IP不能作为传送目的操作数,CS、IP的修改 要通过跳转类指令实现。 MOV 指令传送途径 AX,BX CX,DX SP,BP SI,DI CS,DS,SS,ES MEM DATA 例: MOV DS, AX ;DS AX MOV CH, 20 ;CH 20 MOV BL, AH ;BLAH MOV AX, BX ;AXBX MOV DX, AX ;DXAX MOV AX, BX+0060H 例 (2) 、交换指令 格式: XCHG dst,src 功能: 把 dst 与 src 的内容互换,即执行后的src等于 执行前dst的内容,而执行后dst等于执行前src 的内容。 XCHG AX,BX XCHG AL,BH XCHG BX,1000H XCHG 2100H,DH XCHG SI,AX 注意: 1、dst与 src不能同时为内存单元; 2、不能使用立即数、CS、IP作为操作数。 (3)堆栈操作指令 PUSH src ;把src推入堆栈 POP dst ;从堆栈弹出到dst 1. 堆栈是存储器中的一个连续区域,用于存放中断和 子程序的返回地址,以及运算过程的中间结果。 2. 堆栈的存储单元的逻辑地址常用 SS : SP 表示,SP 称为堆栈指针,其值是最后一个入栈的字数据所在 单元的有效地址,专业术语叫做“指向栈顶”,常通 过入栈指令PUSH和出栈指令POP来访问。 3. PUSH和POP都是字操作指令,故 src 和 dst 都是16 位数据,不能进行8位数据入栈和出栈。 4. 指令中的SS和SP都是隐含寻址方式。 5. 堆栈指令的操作数 src 或 dst 只能是寄存器或存储 器,不能是立即数。 6. 不能把CS和IP作为POP的操作数,但可以作为 PUSH的源。 7. 先进后出的操作原则。原因:只有一个出口。多个 数据入栈、出栈操作时,为恢复原来数据,出栈顺 序必须与入栈顺序相反。 PUSH指令的执行过程: 第一步 修改指针:SP SP 2 第二步 数据入栈:把 src 拷贝到逻辑地址为 SS : SP 的字存储单元中。 POP指令的执行过程: 第一步 数据出栈:把 逻辑地址为 SS : SP 的字存储 单元中的数据拷贝到 dst 中。 第二步 修改指针:SP SP + 2 8. PUSH、POP指令执行前后,SS寄存器的值没有改 变,只改变堆栈指针SP的值,SP的范围 0000H0FFFFH,大小为64kB空间。 9. 堆栈溢出: (1)当SP=0000H,再次执行PUSH指令,进行入栈 操作,则SP=? (2)当SP=0FFFEH,再次执行POP指令,进行出栈 操作,则SP=? 01005H 01006H 01007H 01008HSP(原栈顶) SP - 2(新栈顶)SP 例:设SS=0100 H, SP=0008H,AX=12C3H, BX = 5070 H PUSH AX ;(1) SP SP-2;SP=0006 (2) (01007H)(01006H) AX 0100 0008 SS SP 16 -2 12 C3 POP AX ;(1)将栈顶两单元内容送AX ;(2)SP SP+2 0100 0006 SS SP 16 C3 12 01005H 01006H 01007H 01008H SP+2 (新栈顶)SP 12C3 AX SP(原栈顶) 例例 设设 SS=2000HSS=2000H,SP=0100HSP=0100H,AX=1234HAX=1234H,BX=5678HBX=5678H ,执行以下指令序列,画出堆栈变化过程,写出结果,执行以下指令序列,画出堆栈变化过程,写出结果 PUSHAX PUSHBX POPAX POPCX X XSP=0100 堆栈原来状态 3 4 1 2 X X SP=00FE 执行 PUSH AX 以后 7 8 5 6 3 4 1 2 X X SP=00FC 执行 PUSH BX 以后 3 4 1 2 X X SP=00FE 执行 POP AX 以后 AX=5678H X XSP=0100 执行 POP CX 以后 CX=1234H 结果: AX=5678H BX=5678H CX=1234H (4)换码指令(查表指令) 格式: XLAT (无参数) ;ALBX+AL 以BX与AL的和作为有效地址确定数据段中的某个单元 ,再把该单元的内容送入AL中。用来实现查表,要求 :BX 寄存器指向表的首地址,AL中为位移量。 BX+0 BX+1 BX+2 BX+AL + BX AL X X AL X X 十进制数 g f e d c b a 0 0 1 0 0 0 0 0 0 40H 1 0 1 1 1 1 0 0 1 79H 2 0 0 1 0 0 1 0 0 24H 3 0 0 1 1 0 0 0 0 30H a f g b e c d 十进制数字09转换成七段显示码的译码 表, 现在要取 3 的对应的七段译码。 MOV AL,3 MOV BX,2000H XLAT 执行XLAT指令后: AL=30H 例 2000H40 79 24 30 19 12 02 78 00 10 BX + AL 2、目标地址传送指令 (1)取有效地址 LEA reg16 , men 功能 : 取存储器源操作数mem的有效地址(而不是 单元内容)送16位寄存器 1. 源操作数必须是存储器数据。 2. 目标寄存器只能用16位,不能用8位,不用段寄 存器。 3. 对于存储器数据,有四个属性:数据值(内容) 、有效地址、段基址、数据长度。 4. MOV 指令操作的是存储单元的内容(数据值) ,而 LEA 操作的是存储单元的有效地址。 MOVAX,1000H ;AX=1122H 1 1 2 2 3 3 1000H LEA AX,1000H ;AX=1000H LEA SP, 0500H ;SP=0500H LEABX,BP+SI ;BX=BP+SI 例: (2)将地址指针送DS和另一寄存器: LDS reg16,men32 前2个字节送寄存器,后2个字节送DS 。 LES reg16,mem32 前2个字节送寄存器后,2个字节送ES。 1. 要传送的源操作数是指定存储器的32位数据,即 连续4个存储单元的内容。 2. 目标操作数包含一个段寄存器(DS或ES,隐含寻 址),以及一个16位寄存器(寄存器寻址)。 3. 在8086系统中,逻辑地址占用4个字节,该指令可 一次把双字指针送段寄存器与指针寄存器中。 LDS DI,2100H 2100H 2101H 2102H 2103H 2104H 1C H 20 H 21 H B5 H DI=201CH DS=B521H D7 D6 D5 D4 D3 D2 D1 D0 SF ZF AF PF CFFLAG 3、标志传送 1)、取标志:LAHF ;将标志送AH 置标志:SAHF ;将AH送标志寄存器 AH (2) PUSHF:把标志推入堆栈。 SP SP-2,FLAGH入栈 (3) POPF :把标志弹出堆栈。 FLAG (SP+1,SP) SP SP+2 最小模式下的总线写操作 传送指令的总线操作 1.1. 两个寄存器之间传送数据时,或者立即数送寄存器两个寄存器之间传送数据时,或者立即数送寄存器 ,在,在EUEU中即可完成,不涉及总线操作。中即可完成,不涉及总线操作。 2. 2. 若访问存储器,则涉及总线操作。若存储器为源若访问存储器,则涉及总线操作。若存储器为源 操作数,则执行操作数,则执行“ “存储器读存储器读” ”总线周期,在总线周期,在T3T3状态状态 M/IO = 1M/IO = 1,RD = 0RD = 0,WR = 1WR = 1。 3. 3. 若存储器为目标操作数,则执行若存储器为目标操作数,则执行“ “存储器写存储器写” ”总线总线 周期,此时周期,此时 M/IO = 1M/IO = 1,RD = 1RD = 1,WR = 0WR = 0。 分两次进行,先奇地址 字节,再偶地址字节 访问奇地址字数据 BHE = 0A0 = 0访问偶地址字数据 BHE = 0A0 = 1访问奇地址字节数据 BHE = 1A0 = 0访问偶地址字节数据 SEL A18A0 512k 8 D7D0 SEL A18A0 512k 8 D7D0 D7D0D15D8 BHE A0 奇存 储体 偶存 储体 AH AL 偶地 址字 数据 ALAH 奇地 址字 数据 例例1 1:MOVMOVAXAX,2000H2000H (3)偶地址:故 A0 =0; (1)传送方向从存储器向CPU,故 RD =0,WR=1 (2)访问存储器:故 M/IO =1 (4)偶地址的字操作,故BHE =0,使用D15D0, 一次总线操作即可完成传送。 例例2 2:MOVMOVAXAX,2001H2001H (1)传送方向从存储器向CPU,故 RD =0,WR=1 (2)访问存储器:故 M/IO =1 (3)奇地址的字操作,分两次总线操作完成。 第一次: A0=1, BHE =0,读(2001H)单元字节 AL,使用D15D8 第二次: A0=0, BHE =1,读(2002H)单元字节 AH,使用D7D0 传送指令的总线操作分析 MOVMOV2000H2000H,AXAX MOVMOV2001H2001H,AXAX MOVMOVAHAH,2001H2001H MOVMOVALAL,2001H2001H MOVMOV2010H,5678H;2010H,5678H;写出该指令执行时写出该指令执行时 T1T1、T2T2、T3T3、T4T4各个状态的外部总线各个状态的外部总线AD0AD0 AD15AD15,A16/S3A19/S6A16/S3A19/S6,BHE/S7BHE/S7,RDRD、WRWR、 M/IOM/IO引脚内容的值引脚内容的值 例例3 3:写出执行以下指令时的:写出执行以下指令时的M/IOM/IO,RDRD,WRWR,BHEBHE, A0A0,以及数据总线,以及数据总线D15D0D15D0使用情况使用情况, ,设设 DS=1234HDS=1234H 2)、间接寻址 IN AL,DX OUT DX,AL IN AX,DX OUT DX,AX 寻址空间为:0000H FFFFH 4、输入输出指令 1)、直接寻址 IN AL,n OUT n,AL IN AX,N OUT N,AX 寻址空间为:0 255 字节 1.I/O端口是I/O接口电路中的寄存器,只能用输 入指令 IN 以及输出指令 OUT 来访问。 2.I/O端口只用低16位地址线,寻址范围64KB空间 。 3.I/O端口按字节分配,字端口是地址连续的两个 字节端口,低地址存放低字节,高地址存放高字 节。 4.只能用累加器作为执行输入/输出过程的机构, 字节端口用AL,字端口用AX。 5.用直接输入/输出指令时,寻址范围为 0 255, 因为直接寻址指令中分配给端口号的操作数域为 一个字节。注意间接寻址只能用DX,并且不加 。 5.执行 IN/OUT 指令时,8086的 M/IO = 0,而执 行 MOV 指令时,M/IO = 1; 6.IN 是读操作,RD = 0, WR = 1 ; 分两次进行,先奇地址 字节,再偶地址字节 访问奇地址字端口 BHE = 0A0 = 0访问偶地址字端口 BHE = 0A0 = 1访问奇地址字节端口 BHE = 1A0 = 0访问偶地址字节端口 7.OUT 是写操作 WR = 0,RD=1; 例 INAL, 20H ;读字节端口 IN AX, 30H ;读字端口 OUT 46H,AL;写字节端口 OUT 80H,AX;写字端口 MOV DX,1000H IN AL,DX IN AX,DX OUT DX,AL 二、算术运算指令 b二进制加法:ADD、ADC、INC b二进制减法:SUB、SBB、DEC、DAS b二进制乘法:MUL、IMUL、AAM b二进制除法:DIV、IDIV、AAM b调整类:AAA、DAA、DAS、AAM、AAD 计算机中的数据表示方法 对于真值“69”,可用不同的方法表示 b二进制数 ( 十六进制数)表示: “69” =0100 0101 B = 45H b压缩BCD数表示: “69” = 0110 1001 B = 6 9H b非压缩BCD数表示: “69” = 0000 0110 0000 1001B = 06 09H bASCII码表示: “69” = 0011 0110 0011 1001 B = 36 39H 计算机中的数据运算表示方 法“69 + 46 = 115”, 二进制数 ( 十六进制数)表示: 被加数的二进制表示: “69” = 0100 0101 B = 45H 加数的二进制表示: “46” = 0010 1110 B = 2EH 和数的二进制表示: “115”= 0111 0011 B = 73H 则二进制算式为: 45H 二进制加 2EH =73H 45H45H 二进制加二进制加 2EH2EH 73H73H 计算机中的数据运算表示方 法“69 + 46 = 115”,BCD数表示: 被加数的BCD表示: “69” = 0110 1001 B = 69H 加数的BCD表示: “46” = 0100 0110 B = 46H 和数的BCD表示: “115”= 0001 0001 0101 B = 115H 则二进制算式为: 69H BCD加 46H =115H 69H69H BCDBCD加加 46H46H 115H115H 计算机中的数据运算表示方 法 “69 + 46 = 115”,非压缩BCD数表示: 被加数的非压缩BCD表示: “69” = 0000 0110 0000 1001 B = 06 09H 加数的非压缩BCD表示: “46” = 0000 0100 000 0110 B = 04 06H 和数的非压缩BCD表示: “115”= 0000 0001 0000 0001 000 0101 B = 010105H 则二进制算式为: 06 09H 非压缩BCD加 0406H =01 01 05H 0609H0609H 非压缩非压缩BCDBCD加加 0406H0406H 010105H010105H 1、二进制加法指令 1)不带进位位的加法 格式: ADD DST,SRC 功能: DST DST+SRC 例:(1) . ADD AL,50H ; AL AL+50H (2). ADD CX,1000H ;CX CX+1000H (3). ADD DI, SI ;DI DI+SI 例: (4). ADD BX+DI,AX 若执行前: BX=1000H, DI=2000H, AX=1234H,DS=4000H 则执行中: EA=BX+DI=3000H PA=DS x 16 +EA=13000H 和数为:1234+ 4025H =5259H 执行后: (43000H) 5259H 思考题: 执行过程中,控制总线与数据总线的数值如何变化? 2).带进位位的加法 格式:ADC DST,SRC DST DST+SRC+CF 例: ADC AX,SI ; AX AX+SI+CF ADC DX,SI DX DX+SI+CF ADC BX,3000H BX BX+3000H+CF ADC AL,5 AL AL+5+CF 例:有两个4字节无符号数放在2000H和3000H单 元中,低位在前,高位在后,将两个数相加, 结果放2000H开始的单元中。 10008432H+20007F00H = ? 1).算法分析: (1)可以将两个4字节无符号数相加 看成2个字相加; (2) 两个数的低位字相加后,将可能 产生进位CF; (3)高位字相加,应再加上低位运算的进位位; 2000H 3000H 32 84 00 10 00 7F 00 20 SI DI 2).程序: MOV DI, 2000H ;取第一个字的首地址 MOV SI, 3000H ;取第二个数的首地址 MOV AX, SI ;第一个数的低字 ADD DI , AX ;第一个数和第二个数 ;的低字相加 MOV AX, SI+2 ; 第二个数的高字送AX ADC DI+2, AX ;高16位数据相加,并 ;加上低16位的进位位 3).增量指令 格式:INC src ; src src+1 将操作数内容加一,再回送操作数。 INC AX ;AX AX+1 INC BL ;BL BL+1 INC BYTE PTRBX+DI+500 注意:INC指令影响标志AF、OF、PF、SF、ZF, 但不影响进位标志CF。 4).加法的十进制调整 二进制加法与压缩十进制数加法的区别 1 2 3 3 4 8 9 + 十进制加法 B D 3 4 8 9 + 二进制加法 + 66H 1 2 3 H 加法的十进制调整 指令 格式:DAA ; 功能: 把AL中两个压缩BCD数 按二进制加法运算得 到的和调整为压缩BCD 数,再回送AL。 AF=1或低4位9? CF=1或高4位9? ALAL+06H ALAL+60H N N 加法十进制调整过程 说明: 隐含寻址方式,源和目的操作数都是AL以及标志位 AF、CF。 DAA 紧跟在 ADD/ADC 之后,与 ADD/ADC 一起实 现两位十进制数(BCD码)加法。 执行 ADD/ADC 指令的两个操作数必须为压缩BCD 数,且相加的结果必须存放在AL中。 例:求 BCD数BL 与 DL的和,结果送到BL中 MOV AL , BL ;取第一个加数 ADDAL , DL ;与第二个数进行二进制加 DAA ;加法的十进制调整 MOVBL , AL ;回送结果 假设执行前BL=38H,DL=76H,则执行结果: AL=? BL=? DL=? AF=? CF=? 假设执行前BL=3AH,DL=76H,则执行结果: AL=? BL=? DL=? AF=? CF=? 例:多字节十进制数加法 例:有两个4字节BCD数放在 2000H和3000H单元中,低 位在前,高位在后,将两个 数相加,结果放2000H开始 的单元中。 2000H 3000H 32 84 00 10 33 77 55 20 SI DI 2).程序: MOVBX,0000H;第1个字节 MOVAL,BX+2000H ADDAL,BX+3000H DAA MOVBX+2000H,AL INCBX ;第2个字节 MOVAL,BX+2000H ADCAL,BX+3000H DAA MOVBX+2000H,AL 2).程序: INCBX ;第3个字节 MOVAL,BX+2000H ADDAL,BX+3000H DAA MOVBX+2000H,AL INCBX ;第4个字节 MOVAL,BX+2000H ADDAL,BX+3000H DAA MOVBX+2000H,AL 5).加法的ASCII调整 格式:AAA ; 功能:在用ADD/ADC指令对两个非压缩BCD数或ASCII码表示的 十进制数按二进制相加,并把和值存放在AL的条件下,用 此指令将AL中的结果调整为1位非压缩BCD数,其进位位累 加到AH中。 二进制加法与非压缩BCD吗加法的区别 0 1 0 3 0 4 0 9 + 十进制加法 0 D 0 4 0 9 + 二进制加法 + 06H 0 1 0 3 H AF=1或低4位9? ALAL+06H AHAH+01 AF1,CF1 AL高4位清零 N AAA调整过程 说明: 隐含寻址方式,源操作数都是AL以及标志位AF、CF ,目的操作数为AL、AH以及标志位AF、CF。 AAA 紧跟在 ADD/ADC 之后,与 ADD/ADC 一起实 现一位非压缩十进制数加法。 执行 ADD/ADC 指令的两个操作数必须为非压缩压缩 BCD数或ASCII码,且相加的结果必须存放在AL中。 例:ASCII十进制数加法 2、减法指令 (1)不带借位的减法 格式:SUB DST,SRC DST DST-SRC 例: SUB BX,CX ;BXBX-CX SUB BP+2,CL ;BP+2 BP+2-CL SUB AL,20 ;AL AL-20 SUB SI,5010H ;SI SI-5010H SUB WORD PTR DI,1000H ;DI+1DI DI+1DI-1000H (2)带借位的减法 格式: SBB DST,SRC DST DST SRCCF 例: SBB AX,2030H;执行:AX AX 2030H CF SBB WORD PTR DI+2,1000H; SBB DX, BX+20H (3)减量指令 将操作数内容减一,再回送操作数。 格式: DEC DST;DST DST 1 例: DEC AX ;AX-1,结果送AX DEC BL ;BL BL-1 DEC BYTE PTR DI+2 ;将DI+2所指向的一个字节的内存单元加一 4)、求补指令 格式: NEG DST 对DST求补,0 -DST 例: NEG AL ;对AL中的数求补,结果送AL NEG CX ;对CX中的数求补,结果送CX 5)、比较指令 格式: CMP DST,SRC; DST - SRC 注意:CMP指令执行相减,但不回送结果,两个 操作数的值都保持不变,结果只影响标志位CF、 OF、SF、ZF。 大小的比较方法 1. 无符号数的比较:用借位标志 CF
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人教部编版七年级道德与法治下册说课稿:4.2情绪的管理
- 2025年金融科技在普惠金融中区块链技术的应用与效果评估
- 酒精外漏应急预案
- 2025年生物质能与煤炭耦合燃烧技术在建材行业的节能减排效果评估报告
- 幼防滑应急预案
- 2025年光伏电站智能运维系统在光伏电站智能能源管理与优化中的应用报告
- 2025新能源汽车二手车市场评估与流通市场潜力挖掘研究报告
- 徐汇区多功能活动策划方案
- 食品产业园项目节能评估报告
- 遗体暂存应急预案
- 粉红税问题成因分析
- 知识产权转化与产权运作制度
- 中国冠心病康复循证实践指南(2024版)解读
- 部编版历史八年级上册第一单元 第2课《第二次鸦片战争》检测卷(后附答案及解析)
- 《北京市二年级上学期数学第二单元试卷》
- 中国老年患者术后谵妄防治专家共识2023
- 山东省济南市舜耕中学2024-2025学年九年级上学期10月月考化学试题(无答案)
- 明股实债合作完整协议
- 2024年“蓉漂人才荟”四川成都市农林科学院招聘高层次人才8人历年【重点基础提升】模拟试题(共500题)附带答案详解
- 厦门航空港货运业务竞争战略研究的中期报告
- 设计伦理与社会责任
评论
0/150
提交评论