欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    微机原理与接口技术指令系统.ppt

    • 资源ID:6284422       资源大小:232KB        全文页数:109页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    微机原理与接口技术指令系统.ppt

    2023/10/13,1,微机原理与接口技术,第三章 指令系统,2023/10/13,2,第一节 指令的基本结构和执行时间,指令指令系统80868088CPU的指令系统共包含92种基本指令,按照功能可将它们分为6大类:数据传送指令 算术运算指令 逻辑运算和移位指令 串操作指令 控制转移指令 处理器控制指令,2023/10/13,3,8086指令的一般格式如下:操作码 操作数,操作数操作数主要分为3类:立即数操作数、寄存器操作数 存储器操作数。,2023/10/13,4,表3-2 隐含及允许超越的段寄存器存储器操作的类型 隐含的段寄存器 允许超越的段寄存器 偏移地址取指令 CS 无 IP堆栈操作 SS 无 SP通用数据读写 DS CS,ES,SS 有效地址源数据串 DS CS,ES,SS SI目标数据串 ES 无 DI用BP作为基址寄存器 SS CS,DS,ES 有效地址,2023/10/13,5,指令的执行时间一条指令的执行时间包括取指令、取操作数、执行指令及传送结果几部分,单位用时钟周期表示 寄存器操作数的指令执行速度最快,立即数操作数次之,存储器操作数指令的执行速度最慢,2023/10/13,6,第二节 8086的寻址方式,一、立即寻址(Immediate Addressing)主要用于给寄存器或存储单元赋初值 MOV AX,3508H,2023/10/13,7,二、直接寻址(Direct Addressing)直接寻址指令在指令的操作码后面直接给出操作数的16位偏移地址。此偏移地址也称为有效地址EA(Effective Address),与指令的操作码一起,存放在内存的代码段.低8位存放在低地址单元,高8位存放在高地址单元。,2023/10/13,8,直接寻址:MOV AX,3200H如果DS=5000H,则所寻找的操作数的物理地址:5000H10H+3200H=50000H+3200H=53200H,2023/10/13,9,段超越:MOV BX,ES:2100H,2023/10/13,10,三、寄存器寻址(Register Addressing)操作数为CPU的内部寄存器 指令在执行过程中不必通过访问内存而取得操作数,因此执行速度很快。MOV DS,AX,2023/10/13,11,四、寄存器间接寻址(Register Indirect Addressing)MOV AX,DI 指令中的16位寄存器的内容不是操作数,而是操作数的偏移地址,操作数本身则在存储器中。可用的寄存器有四个,分别是:SI、DI、BX和BP,但如果使用不同的间址寄存器,则相应的段寄存器有所不同,2023/10/13,12,1选择SI、DI、BX作为间址寄存器操作数在数据段(没有使用段超越时)MOV AX,DI 若已知(DS)=5000H,(DI)=1600H,则操作数的物理地址为:5000H10H+1600H=51600H 执行的结果为(AX)=789AH,2023/10/13,13,2选择BP作为间址寄存器 操作数在堆栈段(没有使用段超越时)MOV BP,AX 若已知(SS)=6000H,(BP)=1500H,则操作数的物理地址为:6000H10H+1500H=61500H 若已知(AX)=5566H,则指令的执行结果为:66H送到61500H内存单元,55H送到61501H内存单元,2023/10/13,14,无论用SI、DI、BX或BP作为间址寄存器,都允许段超越。MOV ES:DI,AX MOV DX,DS:BP,2023/10/13,15,五、变址寻址(Indexed Addressing)以指定的寄存器内容,加上指令中给出的8位或16位位移量(必须要以一个段寄存器作为基地址),作为操作数的地址。作为变址寻址的寄存器可以是SI、DI、BX、BP四个寄存器中的任一个,若用SI、DI和BX作为变址寄存器,操作数在数据段,即段地址在DS寄存器;若用BP变址,则操作数在堆栈段,即段地址在SS寄存器 MOV AX,2000HSI 若(SI)=1200H,(DS)=1500H,则操作数的地址为18200H,2023/10/13,16,变址寻址方式,2023/10/13,17,六、基址变址寻址(Based Indexed Addressing)将BX和BP看作基址寄存器,将SI和DI看作变址寄存器。基址加变址的寻址方式:把一个基址寄存器(BX或BP)的内容加上一个变址寄存器(SI或DI)的内容,再加上指令中指定的8位或16位位移量(必须要以一个段寄存器作为地址基址),作为操作数的地址 MOV AX,1050HBXSI,2023/10/13,18,MOV AX,1050HBXSI若(BX)=2000H,(SI)=1600H,(DS)=1200H,指令中给出的偏移量为1050H,则源操作数的物理地址为16650H 若用BX作为基址寄存器,则段寄存器为DS,操作数在数据段中;若用BP作为基址寄存器,则段寄存器为SS,操作数在堆栈段中。,2023/10/13,19,基址加变址的寻址方式,2023/10/13,20,第三节 8086的指令系统,数据传送(Data transfer)算术运算(Arithmetic)逻辑运算和移位(Logic)串操作(String manipulation)控制转移(Control transfer)处理器控制(Processor control),2023/10/13,21,OPRD 泛指各种类型的操作数mem 存储器操作数acc 累加器操作数dest 目的操作数src 源操作数disp 8位或16位偏移量,可用符号地址表示DATA 8位或16位立即数port 输入输出端口,可用数字或表达式表示()表示寄存器的内容 表示存储单元的内容或偏移地址,2023/10/13,22,一、数据传送类指令,按功能可分为以下4小类:通用数据传送指令 输入输出指令 目标地址传送指令 标志传送指令,2023/10/13,23,1.通用数据传送指令(General Purpose Transfer)一般传送指令MOV 堆栈操作指令PUSH和POP 交换指令XCHG 查表转移指令XLAT 字位扩展指令,2023/10/13,24,一般传送指令MOV(Movement)MOV dest,src;(dest)(src)既可传送字节操作数(8位),也可传送字操作数(16位);可使用本章讨论过的各种寻址方式;可实现以下各种传送:,2023/10/13,25,MOV可实现的各种传送:,寄存器与寄存器之间的传送:MOV AL,CL 寄存器与段寄存器之间的传送:MOV DS,AX 寄存器与存储器之间的传送:MOV 3000H,AX 立即数到寄存器的传送:MOV AL,20H 立即数到存储器的传送:MOV BYTE PTRBP+SI,20H 存储器与段寄存器之间的传送:MOV DS,2000H,2023/10/13,26,使用MOV指令完成数据传送时需注意几点:,MOV指令的两个操作数的类型必须相同 MOV AX,DL 不能用一条MOV指令完成两个存储器单元之间的数据传送 MOV BX,SI 不能用立即数直接给段寄存器赋值 MOV DS,DATA 不能在段寄存器之间进行直接数据传送 MOV DS,ES 通常不要求用户用MOV指令修改代码段寄存器CS和指令指针寄存器IP的内容,但CS可以作为源操作数,2023/10/13,27,堆栈操作指令PUSH和POP(Push word onto stack,Pop word off stack)堆栈是内存中一个特定的区域,用以存放寄存器或存储器中暂时不用但又必须保存的数据。,2023/10/13,28,堆栈操作需要遵循以下原则:,堆栈的存取每次必须是一个字(16位);向堆栈中存放数据时,总是从高地址向低地址方向增长,从堆栈取数据时正好相反;堆栈指令中的操作数只能是寄存器或存储器操作数,而不能是立即数;堆栈段在内存中的位置由SS决定,堆栈指针SP总是指向栈顶,即SP的内容等于当前栈顶的偏移地址。在压入操作数之前,SP先减2。每弹出一个字,SP加2;对堆栈的操作遵循“后进先出(LIFO:Last In First Out)”的原则。最后压人堆栈的数据会最先被弹出。,2023/10/13,29,堆栈示意图,2023/10/13,30,堆栈操作指令PUSH,POP,PUSH src;src的高8位(SP)-1;src的低8位(SP)-2;(SP)-2(SP)POP dest;SPdest的低8位;SP+1dest的高8位;(SP)+2(SP),2023/10/13,31,指令中,操作数src和dest可以是以下三种类型:寄存器(包括数据寄存器、地址寄存器和变址寄存器);段寄存器(CS除外。PUSH CS指令是合法的;而POP CS是非法的);存储器单元,2023/10/13,32,PUSH AX指令执行示意图,2023/10/13,33,POP AX指令执行示意图,2023/10/13,34,交换指令XCHG(Exchange),指令格式及操作:XCHG dest,src;(dest)(src)源操作数和目标操作数均可以是寄存器或存储器,但不能同时为存储器。即可以在寄存器与寄存器之间、寄存器与存储器之间进行交换,但不能在存储器与存储器之间进行交换。不能为段寄存器操作数。即段寄存器的内容不能参加交换。两个操作数的字长必须相同,可以是字节交换,也可以是字交换。,2023/10/13,35,查表转移指令XLAT(Translate),指令格式与操作:XLAT;(AL)(BX)+(AL)或:XLAT src_table(src_table表示要查找的表的首地址)可以根据表中元素的序号查出表中相应元素的内容应预先将要查找的这类代码排成一个表存放在内存的某个区域中。将表的首地址(偏移地址)送BX寄存器,要查找的元素的序号送AL,表中第一个元素的序号为0,然后依次为1,2,3,。执行XLAT指令后,标中指定序号的元素存于AL,2023/10/13,36,例:,现要查出数值6对应的ASCII码 LEA BX,Hex_table;(BX)表的首地址 MOV AL,6;(AL)6 XLAT;查表转换结果为(AL)=36H,为6所对应的ASCII码。,2023/10/13,37,字位扩展指令,操作数扩展的规则是:扩展时在高位添加符号位,即将符号位扩展到整个高8位(或高16位)。例如,要把有符号数35H扩展为一个字,则结果为0035H;而如果要扩展的数是81H,则结果为FF81H。,2023/10/13,38,CBW(Convert Byte to Word),CBW;若(AL)80H,则(AH)=00H;否则(AH)=FFH。CBW将一个字节的数(8位)扩展为一个字长的数(16位)。指令中隐含了操作数AL和AH。CBW指令不影响标志位。例如,把字节9AH扩展为字的语句如下:MOV AL,9AH CBW其结果为:(AX)=FF9AH。,2023/10/13,39,CWD(Convert Word to Double word),CWD;若(AX)8000H,则(DX)=0000H;否则(DX)=FFFFH。CWD将一个字操作数(16位)扩展为一个双字(32位)。指令中隐含了操作数AX和DX,扩展后的高16位放在DX中。CWD指令也不影响标志位。例如,把字25ABH扩展为双字的语句如下:MOV AX,25ABH CWD其结果为:(DX:AX)=000025ABH,2023/10/13,40,输入输出指令(Input and Output),输入指令IN用于从外设端口接收数据,输出指令OUT向外设端口发送数据。无论接收到的数据或准备发送的数据,都必须在累加器AX(字)或AL(字节)中 直接寻址方式:当I/O端口地址为8位二进制时,在指令中直接给出此端口地址。它允许寻址256个端口,端口地址为0FFH。DX寄存器间接寻址方式:当I/O端口地址为16位二进制时,用DX寄存器间接寻址。它可寻址64K个端口,端口地址为0FFFFH。,2023/10/13,41,输入指令IN(Input byte or word)IN acc,port;port为8位立即数表示的端 口地址,直接寻址或 IN acc,DX;DX给出16位端口地址,间接寻址 输出指令OUT(Output byte or word)OUT port,acc;port为8位立即数表示的端口地址,直接寻址或OUT DX,acc;DX给出16位端口地址,间接寻址,2023/10/13,42,例 将一个字节3BH输出到端口地址78A0H,MOV AL,3BH;将要输出的字节送入累加器ALMOV DX,78A0H;将16位端口地址送入DX进行间址OUT DX,AL;将AL中的一个字节输出到DX所指定的16位端口地址,2023/10/13,43,目标地址传送指令(Address-Object Transfer),取偏移地址指令LEA(Load Effective Address)LEA reg16,mem指令指令中的源操作数必须为存储器操作数,目标操作数必须为16位通用寄存器,指令的执行结果是把源操作数的有效地址(即16位偏移地址)送到目标寄存器。例如:LEA BX,BUFFER,2023/10/13,44,注意LEA指令和MOV指令的区别:LEA BX,BUFFER MOV BX,BUFFER 以下两条指令的效果相同:LEA BX,BUFFER MOV BX,OFFSET BUFFER,2023/10/13,45,LDS(Load pointer using DS)LDS reg16,mem32;(reg16)(mem32)+1:(mem32);(DS)(mem32)+3:(mem32)+2)指令中源操作数mem32为存储器操作数,目标操作数为16位通用寄存器。LDS指令把存储器mem32中存放的一个32位远地址指针(包括偏移地址和段地址)送到reg16和DS。四个存储单元的前两个单元的内容作为偏移地址送到reg16,后两个单元的内容作为段地址送到段寄存器DS。,2023/10/13,46,例,设(DS)=6000,内存地址为60348H开始的4个单元中存放了一个32位的远地址指针98011H。LDS SI,0348H MOV AX,SI 上述第一条指令执行后的结果为:(SI)=8011H,(DS)=9000H。第二条指令的执行结果为:(AX)=3412H,2023/10/13,47,LES(Load pointer using ES)LES指令的格式及功能与LDS相似,两个高地址单元中给出的段地址送ES。,2023/10/13,48,标志传送指令(Flag Register Transfer),LAHF(Load AH from Flags)该指令将标志寄存器FLAGS中的五个标志位,即符号标志SF、零标志ZF、辅助进位标志AF、奇偶标志PF以及进位标志CF分别传送到累加器AH的对应位。LAHF指令不影响标志位。,2023/10/13,49,SAHF(Store AH into Flags)SAHF指令的传送方向与LAHF相反,将AH寄存器的第7、6、4、2、0位分别传送到标志寄存器的对应位。SAHF指令影响标志位,FLAGS寄存器中的SF、ZF、AF、PF和CF将被修改成AH寄存器对应位的状态,但其余标志位不受影响。,2023/10/13,50,PUSHF(Push Flags onto stack)PUSHF指令是将标志寄存器FLAGS压入堆栈。指令本身不影响标志位。SP-1(FLAGSH)SP-2(FLAGSL)(SP)(SP)-2POPF(Pop Flags off stack)POPF指令将堆栈中当前栈顶的两个单元的内容弹出到标志寄存器FLAGS中。POPF指令影响标志位(FLAGSL)SP(FLAGSH)SP+1(SP)(SP)+2,2023/10/13,51,算术运算指令,8086/8088提供了加、减、乘、除4组基本的算术运算指令,既可以用于字节运算,也可以用于字运算;既可用于无符号数运算,也可用于带符号数运算。若是带符号数,用补码表示。8086/8088还提供了各类校正操作指令,可以进行十进制的算术运算。,2023/10/13,52,加法运算指令,不带进位的加法指令ADD带进位的加法指令ADC加1指令INC两条加法调整指令:AAA和DAA。,2023/10/13,53,不带进位的加法指令ADD(Addition),ADD OPRD1,OPRD2;(OPRD1)(OPRD1)+(OPRD2)ADD加法指令影响标志位源操作数和目标操作数可以是寄存器操作数或存储器操作数,源操作数还可以是立即数;操作数可以是无符号数,也可以是带符号数。需注意两点:一是源操作数与目标操作数不能同时为存储器操作数,二是不能对段寄存器进行运算,2023/10/13,54,带进位的加法指令ADC(Add with carry),ADC OPRD1,OPRD2;(OPRD1)(OPRD1)+(OPRD2)+(CF)ADC指令与ADD指令在格式、功能及对标志位的影响等方面都类似,只是在ADC指令中,CF也要参加求和运算ADC指令主要用于多字节数据的加法运算。如果低字节相加时产生进位,则在下一次高字节相加时应将此进位加进去,2023/10/13,55,加1指令INC(Increment by 1),INC OPRD;(OPRD)(OPRD)+1INC指令对指定的操作数加1,再送回到该操作数。在指令中,操作数OPRD可以是寄存器操作数,也可以是存储器操作数;可以是8位,也可以是16位。但不能是段寄存器,也不能是立即数 INC指令不影响CF标志位,但会影响其他5个状态标志位AF、OF、PF、SF和ZF。INC指令通常用在循环程序中修改地址指针及循环次数等,2023/10/13,56,压缩BCD加法的十进制调整指令DAA(Decimal Adjust for Addition),所谓压缩的BCD码,是指一个字节中可以存放两位BCD码,高4位和低4位各存放一位。一般来说,两个BCD码相加以后,有可能得到不正确的BCD结果,可用DAA指令对AL寄存器中的“和”进行调整,即可得到预期的结果。DAA指令调整的方法是:若(AL)中低4位9或AF=1,则(AL)+06H(AL),并使AF=1;若(AL)中高4位9或CF=1,则(AL)+60H(AL),并使CF=1。,2023/10/13,57,例 编程用BCD数计算4635?,MOV AL,46H;(AL)=46H ADD AL,35H;(AL)=7BH DAA;(AL)=81H,2023/10/13,58,非压缩BCD加法的十进制调整指令AAA(unpacked BCDASCII Adjust for Addition),所谓非压缩的BCD码,就是一个字节存放一位BCD码(BCD码存放在字节的低4位,高4位为零)。调整以前,先用指令ADD或ADC进行8位数的加法运算,相加结果放在AL中,用AAA指令调整后,非压缩BCD码的低位在AL寄存器,高位在AH寄存器。AAA指令的调整步骤为:若(AL)中低4位9或AF=1,则(AL)+6,(AH)+1,并使AF=1;屏蔽掉(AL)中高4位,即(AL)(AL)0FH;CFAF,2023/10/13,59,例 用BCD码计算86?,MOV AL,08H;BCD码数8 MOV BL,06H;BCD码数6 ADD AL,BL;(AL)=08H+06H=0EH AAA;(AL)=0EH+06H=04H(高4位清零);(AH)=1;(CF)=1,2023/10/13,60,减法运算指令,不带进位减法指令SUB带进位减法指令SBB减1指令DEC求补指令NEG比较指令CMP减法的ASCII调整指令AAS减法十进制调整指令DAS,2023/10/13,61,不带进位减法指令SUB(Subtraction)SUB OPRD1,OPRD2;(OPRD1)(OPRD1)-(OPRD2)带进位减法指令SBB(Subtraction with Borrow)SBB OPRD1,OPRD2;(OPRD1)(OPRD1)-(OPRD2)-CF减1指令DEC(Decrement by 1)DEC OPRD;(OPRD)(OPRD)-1,2023/10/13,62,DEC指令常用在循环程序中修改循环次数。例如:MOV CX,1000H NEXT:DEC CX JNZ NEXT HLT,2023/10/13,63,求补指令NEG(Negate)NEG OPRD;(OPRD)0-(OPRD)求补指令对6个操作数均有影响。操作数的类型可以是寄存器或存储器;可以对8位或16位数求补 利用NEG指令可以得到负数的绝对值,2023/10/13,64,比较指令CMP(Compare)CMP OPRD1,OPRD2;(OPRD1)-(OPRD2),结果不送回OPRD1比较指令对6个状态标志位SF、ZF、AF、PF、CF和OF都有影响。比较指令主要用来比较两个数的大小关系,2023/10/13,65,压缩BCD减法的十进制调整DAS(Decimal Adjust for Subtraction)非压缩BCD减法的十进制调整AAS(unpacked BCDASCII adjust for subtraction),2023/10/13,66,乘法运算指令,无符号数乘法指令MUL有符号数乘法指令IMUL乘法的十进制调整指令AAM,2023/10/13,67,无符号数乘法指令MUL(Multiplication unsigned)MUL OPRD指令的操作为:字节乘法:(AX)(OPRD)(AL)字乘法:(DX:AX)(OPRD)(AX)源操作数OPRD可以是8位或16位的寄存器或存储器。另一个操作数隐含在累加器中(8位乘法时在AL中;16位乘法时在AX中)。两个操作数均按无符号数处理,其取值范围为0255(字节),或065535(字)。乘法指令要求两个操作数必须等长,且不能是立即数,2023/10/13,68,有符号数乘法指令IMUL(Integer Multiplication)操作数应满足带符号数的取值范围,即128127(字节)和3276832767(字)乘法的十进制调整指令AAM(unpacked BCDASCII adjust for multiply),2023/10/13,69,除法运算指令,无符号数除法指令DIV带符号数除法指令IDIV除法的十进制调整指令AAD,2023/10/13,70,无符号数除法指令DIV(Division unsigned)DIV OPRD指令中的操作数OPRD(除数)可以是8位或16位的寄存器操作数或存储器操作数。指令隐含被除数AX(16位)或DX:AX(32位)。字节除法:(AL)(AX)/(OPRD)(AH)(AX)%(OPRD)(%为取余数操作)字除法:(AX)(DX:AX)/(OPRD)(DX)(DX:AX)%(OPRD)(%为取余数操作),2023/10/13,71,带符号数除法指令IDIV(Integer Division)IDIV指令在格式和功能上都与DIV指令类似,只是要求操作数为有符号数 除法的十进制调整指令AAD(unpacked BCDASCII adjust for division),2023/10/13,72,逻辑运算和移位指令,逻辑运算指令AND(逻辑“与”)OR(逻辑“或”)NOT(逻辑“非”)XOR(逻辑“异或”)TEST(测试)这些指令可对8位或16位的寄存器或存储器单元中的内容进行按位操作,2023/10/13,73,逻辑“与”指令AND(Logical and)AND OPRD1,OPRD2;(OPRD1)(OPRD1)(OPRD2)AND指令的主要用途是将目标操作数的某些位清零,而其他位保持不变 如果一个寄存器的内容与该寄存器本身相与(例如:AND AX,AX),则寄存器原来的内容不会改变,但将影响标志位SF、ZF和PF,并使CF=OF=0,2023/10/13,74,逻辑“或”指令OR(Logical inclusive or)OR OPRD1,OPRD2;(OPRD1)(OPRD1)(OPRD2)OR指令的主要用途是将目标操作数的某些位置1,而其他位保持不变,2023/10/13,75,逻辑“非”指令NOT(Logical not)NOT OPRDNOT指令将指定的操作数OPRD按位求反,再送回到该操作数 逻辑“异或”指令XOR(Logical not)XOR OPRD1,OPRD2;(OPRD1)(OPRD1)(OPRD2)XOR指令的一个用途是将寄存器清零,同时也将进位标志位CF清零。例如:XOR AX,AX,2023/10/13,76,测试指令TEST(Test or non-destructive logical and)TEST指令的格式、操作及对操作数的要求和AND指令类似,但该指令“与”的结果不送回目标操作数,而只是影响标志位。TEST指令常用于在不破坏原来操作数的情况下检测操作数中某些位是“1”还是“0”。例如:TEST AL,80H TEST AX,4000H,2023/10/13,77,非循环移位指令,算术左移指令SAL(Shift arithmetic left)算术右移指令SAR(Shift arithmetic right)逻辑左移指令SHL(Shift logic left)逻辑右移指令SHR(Shift logic right)可以实现对8位或16位的寄存器或存储器操作数进行指定次数的移位。在要求进行2位或更多位的移动时,移位的次数必须放在CL寄存器中。,2023/10/13,78,算术左移和逻辑左移指令SAL/SHL 算术左移指令SAL和逻辑左移指令SHL执行完全相同的操作:SAL OPRD,1 SHL OPRD,1或 SAL OPRD,CL SHL OPRD,CLSAL指令和SHL指令的区别是:SAL指令将操作数视为有符号数,而SHL将操作数视为无符号数,2023/10/13,79,例3-8 一个16位无符号数存放在以DATA为首地址的两个连续的单元,用左移指令实现将该数乘以乘以10。,LEA SI,DATA;DATA单元的偏移地址送SI MOV AX,SI;(AX)被乘数 SHL AX,1;(AX)DATA*2 MOV BX,AX;暂存于BX MOV CL,2;(CL)移位次数 SHL AX,CL;(AX)DATA*8 ADD AX,BX;(AX)DATA*10 HLT;停止,2023/10/13,80,逻辑右移指令SHR将目标操作数顺序向右移1位或CL指定的位数 例:SHR BH,1 SHR AX,CL,算术右移指令SAR 将目标操作数顺序向右移1位或CL指定的位数 例:SAR AL,1 SAR BX,CL,2023/10/13,81,循环移位指令,不带进位标志位CF的循环左移指令ROL(Rotate left)不带进位标志位CF的循环右移指令ROR(Rotate right)带进位标志位CF的循环左移指令RCL(Rotate left through carry)带进位标志位CF的循环右移指令RCR(Rotate right through carry)所有循环移位指令都只影响进位标志CF和溢出标志OF,而对其他标志位没有影响,2023/10/13,82,不带进位标志位CF的循环左移指令ROL ROL OPRD,1或 ROL OPRD,CL,不带进位标志位CF的循环右移指令ROR ROR OPRD,1或 ROR OPRD,CL,2023/10/13,83,带进位标志位CF的循环左移指令RCL RCL OPRD,1或 RCL OPRD,CL,带进位标志位CF的循环右移指令RCR RCR OPRD,1或 RCR OPRD,CL,2023/10/13,84,串操作指令,串操作指令具有以下的共同特点:源串指针为DS:SI。源串(源操作数)默认为数据段,即段基地址在DS中,但允许超越。偏移地址用SI寄存器指定。目标串指针为ES:DI。目标串(目标操作数)默认在ES附加段中,不允许段超越。偏移地址用DI寄存器指定。使用重复前缀时,要操作的串长度放在CX寄存器中。自动修改指针和计数器。在对每个字节(或字)操作后,SI和DI寄存器的内容会根据方向标志DF的情况自动修改:若(DF)=0,则每次操作后,SI和DI按地址增量方向修改(对字节操作加1;对字操作加2);若(DF)=1,则SI和DI按地址减量方向修改。若使用了重复前缀,CX的内容也会每次自动减1。,2023/10/13,85,用于串操作的重复前缀:REP:无条件重复前缀 重复执行指令规定的操作,直到(CX)0;REPE:相等时重复 ZF1,且(CX)0时重复;REPZ:结果为零时重复 ZF1,且(CX)0时重复;REPNE:不相等时重复 ZF0,且(CX)0时重复;REPNZ:结果不为零时重复 ZF0,且(CX)0时重复,2023/10/13,86,串传送指令MOVS(Move string)指令格式有3种:MOVS OPRD1,OPRD2 MOVSB MOVSW第二种和第三种格式隐含了两个操作数的地址,此时源串和目标串地址必须符合默认值,即源串在DS段,偏移地址在SI中,而目标串在ES段,偏移地址在DI中,2023/10/13,87,例 将3000H:1500H地址开始的100个字节传送到6000H:1000H开始的内存单元中去,MOV AX,3000H MOV DS,AX;设定源串段地址 MOV AX,6000H MOV ES,AX;设定目标串段地址 MOV SI,1500H;设定源串偏移地址 MOV DI,1000H;设定目标串偏移地址 MOV CX,100;串长度送CX CLD;(DF)0,使地址指针按增量方向修改 NEXT:REP MOVSB,2023/10/13,88,串比较指令CMPS(Compare string)指令有3种格式:CMPS OPRD1,OPRD2 CMPSB CMPSW串比较指令通常和条件重复前缀REPE(REPZ)或REPNE(REPNZ)连用,用来检查两个字符串是否相等。,2023/10/13,89,例3-10 现有两个长度均为100个字节的字符串,STRING1为源串首地址,STRING2为目标串首地址。试比较两个字符串是否相同,并找出其中第一个不相等的字符,将源串中该字符的地址送BX,该字符送AL。,LEA SI,STRING1;(SI)源串首地址 LEA DI,STRING2;(DI)目标串首地址 MOV CX,100;(CX)串长度 CLD;(DF)0,使地址指针按增量方向修改 REPE CMPSB;若相等则重复比较 JCXZ STOP;若(CX)0,则转STOP DEC SI;否则(SI)-1,指向不相等的单元 MOV BX,SI;(BX)不相等单元的地址 MOV AL,SI;(AL)不相等单元的内容STOP:HLT;停止,2023/10/13,90,串扫描指令SCAS(Scan string)指令格式有3种:SCAS OPRD;OPRD为目的串 SCASB SCASWSCAS指令执行时,将累加器AL或AX的值与目的串(由ES:DI所指向)中的字节或字进行比较,比较结果不改变目的操作数,只影响标志位 SCAS指令常用于在一个字符串中搜索特定的关键字,把要找的关键字放在AL(或AX)中,再用本指令与字符串中各字符逐一进行比较,2023/10/13,91,例3-11 有一个包含100个字符的字符串,其首地址为STRING。找出字符串中第一个回车符CR(其ASCII码为ODH),找到后将其地址保存在BX,LEA DI,STRING;(DI)字符串首地址 MOV AL,0DH;(AL)回车符CR MOV CX,100;(CX)字符串长度 CLD;清标志位DF REPNE SCASB;若未找到,重复扫描 JZFOUND;若找到,则转FOUND JMP STOP;转移至STOPFOUND:DEC DI;(DI)-1 MOV BX,DI;地址送到BXSTOP:HLT;停止,2023/10/13,92,串装入指令LODS(Load string)指令格式有3种:LODS OPRD;OPRD为源串 LODSB LODSWLODS指令把由DS:SI指向的源串中的字节或字取到累加器AL或AX中,并在这之后根据DF的值自动修改指针SI,以指向下一个要装入的字节或字。,2023/10/13,93,例3-12 在以BUFFER为首地址的内存区域中,有10个以非压缩BCD码形式存放的十进制数,它们的值可能是09中的任意一个。将这些十进制数顺序显示在屏幕上。在屏幕上显示一个字符的方法,是使用DOS系统功能调用,这样只需要三条语句即可:02HAH;待显示字符的ASCII码DL;INT 21H。,2023/10/13,94,LEA SI,BUFFER;(SI)源串首地址 MOV CX,10;(CX)字符串长度 CLD;清标志位DF MOV AH,02H;(AH)功能号NEXT:LODSB;取一个BCD码到AL ADD AL,30H;BCD码转换为 ASCII码 MOV DL,AL;(DL)待显示字符的ASCII码 INT 21H;显示 DEC CX;(CX)(CX)-1 JNZ NEXT;(CX)0则重复 HLT;停止,2023/10/13,95,串存储指令STOS(Store string)指令格式有3种:STOS OPRD;OPRD为目标串 STOSB STOSWSTOS指令把累加器AL中的字节或AX中的字存到由ES:DI指向的存储器单元中,并在这之后根据DF的值自动修改指针DI的值(增量或减量),以指向下一个存储单元。利用重复前缀REP,可对连续的存储单元存入相同的值,2023/10/13,96,例 将5000H:0800H单元开始的100个字节中装入初始值FFH,MOV AX,5000H MOV ES,AXMOV DI,0800HMOV CX,50CLD MOV AX,0FFFFH REP STOSW,2023/10/13,97,控制转移指令,无条件转移指令JMP(Jump)JMP指令的操作是无条件地将程序转移到指定的目标地址,并从该地址开始执行新的程序段。目标地址可以用直接方式或间接方式给出。JMP指令不影响标志位 段内直接转移 JMP LABLE;(IP)(IP)+disp,disp为8位或16位的相对位移量。指令中的LABLE是一个标号,也称符号地址,它表示转移的目的地。该标号与本程序在同一个代码段内。,2023/10/13,98,段内间接转移指令格式:JMP OPRD;(IP)(OPRD)指令中的操作数OPRD是16位的寄存器或者存储器地址。可以采用各种寻址方式。指令的操作是用指定的16位寄存器或存储器两单元的内容作为目标的偏移地址,来取代原来IP的内容,从而实现程序的转移。代码段寄存器CS的值不变。例:JMP SI;(IP)(SI)JMP WORD PTRBX+SI;(IP)(BX+SI)所指向的连续两个存储单元的内容,2023/10/13,99,段间直接转移 JMP FAR LABLE;(IP)OFFSET LABLE;(CS)SEG LABLE指令的操作数是一个远标号,该标号在另一个代码段内 段间间接转移 JMP mem32;(IP)(mem32);(CS)(mem32+2)指令的操作数是一个32位的存储器地址(不能是寄存器)。指令的操作是将存储器的前两个字节送到IP寄存器,存储器的后两个字节送到CS寄存器,以实现到另一个代码段的转移。,2023/10/13,100,条件转移指令Jcc,条件转移指令Jcc Jcc short_lable指令助记符中的“cc”表示条件。Short_lable为短转移。条件转移指令是

    注意事项

    本文(微机原理与接口技术指令系统.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开