您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 汇编全集之第3章 8086指令系统1
第3章8086指令系统3.2.1数据传送类指令3.2.2算术运算类指令3.2.3位操作类指令3.2.4控制转移类指令3.2.5串操作类指令3.2.6处理机控制类指令3.28086指令系统教学重点重点掌握常用指令功能及应用常用传送指令加减法指令逻辑运算和移位指令控制转移指令字符(串)输入输出功能调用第3章8086指令系统什么是指令系统计算机的指令系统就是指该计算机能够执行的全部指令的集合每种计算机都有它支持的指令集合16位8086指令系统是Intel80x86系列微处理器指令系统的基础第3章8086指令系统学习指令的注意事项指令的功能——该指令能够实现何种操作。通常指令助记符就是指令功能的英文单词或其缩写形式指令支持的寻址方式——该指令中的操作数可以采用何种寻址方式指令对标志的影响——该指令执行后是否对各个标志位有影响,以及如何影响其他方面——该指令其他需要特别注意的地方,如指令执行时的约定设置、必须预置的参数、隐含使用的寄存器等第3章8086指令系统汇编语言指令格式由4部分组成:[标号:]指令助记符[目的操作数,源操作数][;注释]标号表示该指令在主存中的逻辑地址每个指令助记符就代表一种指令目的和源操作数表示参与操作的对象注释是对该指令或程序段功能的说明第3章8086指令系统3.2.1数据传送类指令数据传送是计算机中最基本、最重要的一种操作传送指令也是最常使用的一类指令传送指令把数据从一个位置传送到另一个位置除标志寄存器传送指令外,均不影响标志位重点掌握MOVXCHGXLATPUSHPOPLEA第3章8086指令系统1).通用数据传送指令提供方便灵活的通用传送操作有3条指令MOVXCHGXLATMOVXCHGXLAT第3章8086指令系统(1).传送指令MOV(move)把一个字节或字的操作数从源地址传送至目的地址MOVreg/mem,imm;立即数送寄存器或主存MOV例题1MOVreg/mem/seg,reg;寄存器送(段)寄存器或主存例题2MOVreg/seg,mem;主存送(段)寄存器例题3MOVreg/mem,seg;段寄存器送寄存器或主存例题4第3章8086指令系统MOV指令传送功能MOV也并非任意传送立即数段寄存器CSDSESSS通用寄存器AXBXCXDXBPSPSIDI存储器第3章8086指令系统非法传送种种两个操作数的类型不一致例如源操作数是字节,而目的操作数是字;或相反两个操作数不能都是存储器传送指令很灵活,但主存之间的直接传送却不允许段寄存器的操作有一些限制段寄存器属专用寄存器,对他们的操作能力有限示例示例示例第3章8086指令系统(2).交换指令XCHG(exchange)把两个地方的数据进行互换寄存器与寄存器之间对换数据寄存器与存储器之间对换数据不能在存储器与存储器之间对换数据XCHGXCHGreg,reg/mem;regreg/mem例题6例题5第3章8086指令系统换码指令执行前:在主存建立一个字节量表格,内含要转换成的目的代码表格首地址存放于BX,AL存放相对表格首地址的位移量换码指令执行后:将AL寄存器的内容转换为目标代码(3).换码指令XLAT(translate)将BX指定的缓冲区中、AL指定的位移处的一个字节数据取出赋给ALXLATXLAT;al←ds:[bx+al]例题72).堆栈操作指令堆栈是一个“后进先出FILO”(或说“先进后出FILO”)的主存区域,位于堆栈段中;SS段寄存器记录其段地址堆栈只有一个出口,即当前栈顶;用堆栈指针寄存器SP指定栈顶是地址较小的一端(低端),栈底不变第2章第3章8086指令系统堆栈的操作堆栈只有两种基本操作:进栈和出栈,对应两条指令PUSH和POPPUSH;进栈指令先使堆栈指针SP减2,然后把一个字操作数存入堆栈顶部POP;出栈指令把栈顶的一个字传送至指定的目的操作数,然后堆栈指针SP加2第2章1.进栈指令PUSHPUSHpushaxpush[2000h]PUSHr16/m16/seg;SP←SP-2;SS:[SP]←r16/m16/seg第2章2.出栈指令POPpopaxpop[2000h]POPr16/m16/seg;r16/m16/seg←SS:[SP];SP←SP+2POP第3章8086指令系统堆栈的特点堆栈操作的单位是字,进栈和出栈只对字量字量数据从栈顶压入和弹出时,都是低地址字节送低字节,高地址字节送高字节堆栈操作遵循先进后出原则,但可用存储器寻址方式随机存取堆栈中的数据堆栈常用来临时存放数据传递参数保存和恢复寄存器例题8第3章8086指令系统3)标志传送指令标志寄存器传送指令用来传送标志寄存器FLAGS的内容标志位操作指令直接对CF、DF、IF标志进行复位或置位第3章8086指令系统(1).标志寄存器传送标志寄存器传送指令用来传送标志寄存器FLAGS的内容,方便进行对各个标志位的直接操作有2对4条指令低8位传送:LAHF和SAHF16位传送:PUSHF和POPF第3章8086指令系统标志低字节进出AH指令LAHF;AH←FLAGS的低字节LAHF指令将标志寄存器的低字节送寄存器AHSF/ZF/AF/PF/CF状态标志位分别送入AH的第7/6/4/2/0位,而AH的第5/3/1位任意SAHF;FLAGS的低字节←AHSAHF将AH寄存器内容送FLAGS的低字节用AH的第7/6/4/2/0位相应设置SF/ZF/AF/PF/CF标志第3章8086指令系统标志寄存器进出堆栈指令PUSHF;SP←SP-2;SS:[SP]←FLAGSPUSHF指令将标志寄存器的内容压入堆栈,同时栈顶指针SP减2POPF;FLAGS←SS:[SP];SP←SP+2POPF指令将栈顶字单元内容送标志寄存器,同时栈顶指针SP加2例题9第3章8086指令系统(2).标志位操作标志位操作指令直接对CF、DF、IF标志进行复位或置位,常用于特定的情况对标志位进行设置的指令CLCSTCCMCCLDSTDCLISTI第3章8086指令系统进位标志操作指令用于任意设置进位标志CLC;复位进位标志:CF←0STC;置位进位标志:CF←1CMC;求反进位标志:CF←~CF第3章8086指令系统方向标志操作指令串操作指令中,需要使用CLD;复位方向标志:DF←0STD;置位方向标志:DF←1第3章8086指令系统中断标志操作指令在编写中断服务程序时,需要控制可屏蔽中断的允许和禁止CLI;复位中断标志:DF←0STI;置位中断标志:DF←1第3章8086指令系统(4).地址传送指令地址传送指令将存储器单元的逻辑地址送至指定的寄存器有效地址传送指令LEA指针传送指令LDS和LES注意不是获取存储器单元的内容第3章8086指令系统有效地址传送指令LEA(loadEA)将存储器操作数的有效地址传送至指定的16位寄存器中例题10LEAr16,mem;r16←mem的有效地址EALEA第3章8086指令系统指针传送指令LDSr16,mem;r16←mem,;DS←mem+2LDS指令将主存中mem指定的字送至r16,并将mem的下一字送DS寄存器LESr16,mem;r16←mem,;ES←mem+2LES指令将主存中mem指定的字送至r16,并将mem的下一字送ES寄存器例题11第3章8086指令系统5)输入输出指令8086通过输入输出指令与外设进行数据交换;呈现给程序员的外设是端口(Port)即I/O地址8086用于寻址外设端口的地址线为16条,端口最多为216=65536(64K)个,端口号为0000H~FFFFH每个端口用于传送一个字节的外设数据第3章8086指令系统输入输出寻址方式8086的端口有64K个,无需分段,设计有两种寻址方式直接寻址:只用于寻址00H~FFH前256个端口,操作数i8表示端口号间接寻址:可用于寻址全部64K个端口,DX寄存器的值就是端口号对大于FFH的端口只能采用间接寻址方式第3章8086指令系统输入指令IN将外设数据传送给CPU内的AL/AXINAL,i8;字节输入:AL←I/O端口(i8直接寻址)INAL,DX;字节输入:AL←I/O端口(DX间接寻址)INAX,i8;字输入:AX←I/O端口(i8直接寻址)INAX,DX;字输入:AX←I/O端口(DX间接寻址)IN例题12第3章8086指令系统输出指令OUT将CPU内的AL/AX数据传送给外设OUTi8,AL;字节输出:I/O端口←AL(i8直接寻址)OUTDX,AL;字节输出:I/O端口←AL(DX间接寻址)OUTi8,AX;字输出:I/O端口←AX(i8直接寻址)OUTDX,AX;字输出:I/O端口←AX(DX间接寻址)OUT例题13第3章8086指令系统3.2.2算术运算类指令四则运算是计算机经常进行的一种操作。算术运算指令实现二进制(和十进制)数据的四则运算请注意算术运算类指令对标志的影响掌握:ADD/ADC/INC、SUB/SBB/DEC/NEG/CMP熟悉:MUL/IMUL、DIV/IDIV理解:CBW/CWD、DAA/DAS、AAA/AAS/AAM/AAD第3章8086指令系统(1)加法指令ADDADD指令将源与目的操作数相加,结果送到目的操作数ADD指令按状态标志的定义相应设置ADDADDreg,imm/reg/mem;reg←reg+imm/reg/memADDmem,imm/reg;mem←mem+imm/reg例题14第3章8086指令系统(2)带进位加法指令ADCADC指令将源与目的操作数相加,再加上进位CF标志,结果送到目的操作数ADC指令按状态标志的定义相应设置ADC指令主要与ADD配合,实现多精度加法运算ADCADCreg,imm/reg/mem;reg←reg+imm/reg/mem+CFADCmem,imm/reg;mem←mem+imm/reg+CF例题15第3章8086指令系统(3)加1指令INC(increment)INC指令对操作数加1(增量)INC指令不影响进位CF标志,按定义设置其他状态标志INCINCreg/mem;reg/mem←reg/mem+1incbxincbyteptr[bx]第3章8086指令系统(4)减法指令SUB(subtract)SUB指令将目的操作数减去源操作数,结果送到目的操作数SUB指令按照定义相应设置状态标志SUBSUBreg,imm/reg/mem;reg←reg-imm/reg/memSUBmem,imm/reg;mem←mem-imm/reg例题16第3章8086指令系统(5)带借位减法指令SBBSBB指令将目的操作数减去源操作数,再减去借位CF(进位),结果送到目的操作数。SBB指令按照定义相应设置状态标志SBB指令主要与SUB配合,实现多精度减法运算SBBSBBreg,imm/reg/mem;reg←reg-imm/reg/mem-CFSBBmem,imm/reg;mem←mem-imm/reg-CF例题17第3章8086指令系统(6)减量指令DEC(decrement)DEC指令对操作数减1(减量)DEC指令不影响进位CF标志,按定义设置其他状态标志DECDECreg/mem;reg/mem←reg/mem-1deccxdecwordptr[si]INC指令和DEC指令都是单操作数指令主要用于对计数器和地址指针的调整第3章8086指令系统(7)求补指令NEG(negative)NEG指令对操作数执行求补运算:用零减去操作数,然后结果返回操作数求补运算也可以表达成:将操作数按位取反后加1NEG指令对标志的影响与用零作减法的SUB指令一样NEGNEGreg/mem;reg/mem←0-reg/mem例题18第3章8086指令系统(8)比较指令CMP(compare)CMP指令将目的操作数减去源操作数,按照定
本文标题:汇编全集之第3章 8086指令系统1
链接地址:https://www.777doc.com/doc-4599519 .html