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

    《基本指令系统》PPT课件.ppt

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

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

    《基本指令系统》PPT课件.ppt

    第三章 8086基本指令系统,8086全部指令按功能可分成六大类:数据传送指令、算术运算指令、逻辑指令、串操作指令、控制转移指令和处理机控制指令。本章主要介绍以下内容:数据传送指令算术运算指令位操作指令字符串操作指令 32位CPU扩展的指令,3.1 数据传送指令,数据传送指令负责将数据、地址或立即数传送到寄存器或存储单元中。在8086/8088 CPU指令系统中,数据传送指令共有14条分5组,它们是:(1)通用数据传送指令:MOV、XCHG、XLAT(2)堆栈操作指令:PUSH、POP(3)标志寄存器传送指令:LAHF、SAHF、PUSHF、POPF(4)地址传送指令:LEA、LDS、LES(5)输入输出指令:IN、OUT其中除标志寄存器传送指令外,数据传送指均不影响任何标志位。,3.1 数据传送指令,3.1.1 机器指令格式指令:机器语言的一条语句,它是一组有意义的 二进制代码,由操作码字段和操作数字段 两个部分组成。操作码字段:表示该指令应进行什么性质的操作。操作数字段:指出指令执行的参与者,也就是各 种操作的对象。,图3-1 指令的一般格式,3.1 数据传送指令,3.1.2 通用数据传送指令 通用数据传送指令负责CPU内部的寄存器以及内存单元之间的数据传递,是数据传送指令中使用最多的一组指令。该类指令主要包括:MOV、XCHG和XLAT指令。,3.1 数据传送指令,一、基本的传送指令MOV(Move)格式:MOV DEST,SRC;(DEST)(SRC)其中:(DEST)、(SRC)分别为源和目的操作数。例:MOV AL,BL;BL中的8位数据送AL MOV ES,DX;DX中16位数据送ES MOV AX,BX;MOV CX,1000H MOV DX,5040;立即数5040送DX注:对段寄存器赋值时,只能通过寄存器赋值,不能用立即数直 接赋值。,允许的操作数组合:,SRC 可为:立即数、通用寄存器、存储器、段寄存器。DEST可为:通用寄存器、存储器、段寄存器 DEST和SRC可以有9种组合,如下图所示:(1)通用寄存器到通用寄存器 如:MOVAX,BX;(2)立即数到通用寄存器 如:MOVAX,03H;(3)立即数到存储单元 如:MOVBYTE PTR 2000H,12H(4)存储单元到通用寄存器 如:MOVAX,2000H;(5)通用寄存器到存储单元 如:MOV 2000H,AX;图3-2 MOV指令传送示意图,(6)通用寄存器到除CS外的段寄存器 如:MOVDS,AX;。(7)段寄存器到通用寄存器 如:MOVAX,DS;(8)存储器到除CS外的段寄存器 如:MOVES,2000H;(9)段寄存器到存储器 如:MOV2000H,DS;,二、交换指令 XCHG(Exchange)格式:XCHG DEST,SRC;(DEST)(SRC)功能:将两个操作数DEST与SRC的内容互换.允许的操作数组合:交换可以在通用寄存器之间或通用寄存器与存储器之间进行,但不能在两个存储单元之间直接进行,DEST 与SRC可以为字或者是字节。例:XCHG AL,BL;AL和BL的内容互换 XCHG BX,CX;BX和CX的内容互换。XCHG 1200H,CX;CX中的内容和1200H,;1201H两单元的内容互换,三、查表换码指令 XLAT(Translate)格式:XLAT;AL(BX+AL)表:256字节的数据区。BX BX指向表的首地址 AL 指向数据表某项地址(0255)。执行XLAT时,将BX+AL指向字节单元中的值送AL。该指令操作数全为隐含,换码表首地址在BX中,欲读取数据表单元偏移量在AL中。,例:MOV BX,1000H MOV AL,04H XLAT;AL(BX+AL)=(1004H)=50H换码过程:,3.1.3 堆栈操作指令堆栈及堆栈操作指令(1)堆栈的概念 堆栈是内存的一个逻辑段,当这个段被指定为堆栈后,可用堆栈操作指令对它进行特殊规则的访问,这个规则就是:不论入栈还是出栈,都只能从栈顶处进行,堆栈内数据遵循先进后出,后进先出的原则。(2)堆栈的设置 8086/8088中专门有2个寄存器用于堆栈操作:堆栈段寄存器SS和堆栈指针寄存器SP。SS用来存放堆栈段的段基址,SP用于指示堆栈的顶部单元的段内偏移量,开始时堆栈内没有数据,栈顶就是栈底,故开始时要将栈底单元的偏移量赋给它,以指明栈低位置。,3.1 数据传送指令,二、堆栈操作指令 堆栈按“后进先出”原则设计的数据区。堆栈段地址由SS段寄存器提供堆栈区操作数据地址由堆栈指针寄存器SP提供。SP的初值是指向的地址为栈底,进行堆栈数据操作后SP指向栈顶地址。必须为字操作数1入栈指令PUSH(Push onto the stack)格式:PUSH SRC;SPSP-2,(SP+1,SP)(SRC)8088的入栈过程:(1)SPSP-1,调整堆栈指针,指向一个空地址(新栈顶)(2)(SP)(SRCH),源操作数高字节送SP指向的单元;(3)SPSP-1,调整堆栈指针,指向一个空地址SP;(4)(SP)(SRCL),源操作数低字节送SP指向的单元。,8086的入栈过程:(1)SPSP-2,调整堆栈指针,指向一个空地址;(2)(SP)(SRC),源操作数(字)送SP指向的单元。例1:PUSH AX PUSH BX,2.出栈指令POP(Pop from the stack)格式:POP DEST;(DEST)(SP+1,SP),SPSP+2;或(DEST)(SP),SPSP+28088的出栈过程(1)(DESTL)(SP),源操作数低字节(SP)送目的;(2)SPSP+1,调整堆栈指针SP;(3)(DESTH)(SP),源操作数高字节(SP)送目的;(4)SPSP+1,再调整堆栈指针SP。8086的出栈操作(1)(DEST)(SP),源字操作数(SP)送目的;(2)SPSP+2,调整堆栈指针SP。,例2:将例1堆栈内容,仍弹出给AX、BX。POP BX POP AX例3:将例1堆栈内容,弹出给BX、AX,交换出栈。POP AX POP BX,3.1 数据传送指令,3.1.4 标志传送指令标志寄存器是一个存放条件标志、控制标志的寄存器,主要用于反映处理器的状态和运算结果的某些特征及控制指令的执行。标志传送指令主要用于对标志寄存器的内容进行读取和修改,共包括4条指令:LAHF、SAHF、PUSHF和POPF。,1)LAHF读标志指令格式:LAHF执行操作:(AH)(PSW的低8位)该指令的两个操作数均是隐含的,源操作数为标志寄存器的低字节,目的操作数为AH寄存器。其中,标志寄存器的低字节包含SF、ZF、AF、PF和CF,分别对应第7、6、4、2和0位,而第5、3、1位无定义。,2)SAHF取标志指令格式:SAHF执行操作:(AH)(PSW的低8位)该指令的两个操作数均是隐含的,源操作数为AH寄存器,目的操作数为标志寄存器的低字节。,3)PUSHF标志进栈指令格式:PUSHF执行操作:(SP)(SP)-2(SP)+1,(SP)(PSW)该指令的两个操作数均是隐含的,源操作数为标志寄存器,目的操作数为指针SP所指向的堆栈顶部的一个字单元。其功能是将标志寄存器的内容压入堆栈。,4)POPF标志出栈指令格式:POPF执行操作:(PSW)(SP)+1,(SP)(SP)(SP)+2该指令的两个操作数均是隐含的,源操作数为指针SP所指向的堆栈顶部的一个字单元,目的操作数为标志寄存器。其功能是将堆栈顶部字单元内容弹出到标志寄存器中。,3.1.5 地址传送指令 用于传送段地址或偏移地址的指令一、取有效地址指令 LEA(Load effective address)格式:LEA reg16,mem16;reg16 mem16 功能将源操作数所在单元的16位偏移量(mem16),送到16位寄存器(reg16)目的中。例:LEA AX,2728;将2728单元的偏移量送AX。LEA BX,BP+SI;BX中的内容为BP+SI的值 LEA SP,0482;使堆栈指针SP为482,3.1 数据传送指令,二、将地址指针装到DS和目的寄存器 LDS(Load DS with pointer)格式:LDS reg16,mem32;reg16(mem32),DS(mem32+2)功能把指向mem32开始的四个地址单元内容,高字(段地址)传送到DS中,低字(偏移量)送目的寄存器(reg16)。,例1:设2130H-2133H四个单元中,存放着一个地址,2131H、2130H中存地址的偏移量为2211H,2133H、2132H中存段地址值为4433H,执行指令:LDS DI,2130H;DI2211H,DS4433H。,三、将地址指针装到ES和另一个寄存器LES(Load ES with pointer)格式:LES reg16,mem32;reg16(mem32),;ES(mem32+2)功能把指向mem32开始的四个地址单元内容,高字(段地址)传送到ES中,低字(偏移量)送目的寄存器(reg16)。例2:条件同例1 LES DI,2130H;DI2211H,ES4433H。,3.1.6 输入/输出指令 8086/8088 CPU由于采用独立编址方式,因此必须使用专门的输入/输出指令。这类指令利用累加器AL或AX和外设接口中的端口以字节或字为单位进行信息的传输。由于专门用到了累加器,所以又称累加器专用传送指令。共包括两条指令:IN和OUT。,3.1 数据传送指令,由于8086/8088 CPU外设最多可以有65536个端口,端口号为0000H0FFFFH,因此源操作数有两种格式:当端口号为00H0FFH时(即前256个端口),端口号以立即数的形式直接在指令中指定,这就是长格式中的PORT;当端口号位于0100H0FFFFH时,应先用MOV指令将端口号传送到DX寄存器中,再使用短格式访问端口。,1)IN输入指令,格式:IN AL,PORT 长格式字节操作 IN AX,PORT 长格式字操作 IN AL,DX 短格式字节操作 IN AX,DX 短格式字操作执行操作:(AL)(PORT)长格式字节操作(AX)(PORT+1,PORT)长格式字操作(AL)(DX)短格式字节操作(AX)(DX)+1,(DX)短格式字操作,2)OUT输出指令,格式:OUT PORT,AL 长格式字节操作 OUT PORT,AX 长格式字操作 OUT DX,AL 短格式字节操作 OUT DX,AX 短格式字操作执行操作:(AL)(PORT)长格式字节操作(AX)(PORT+1,PORT)长格式字操作(AL)(DX)短格式字节操作(AX)(DX)+1,(DX)短格式字操作,算术运算指令负责执行加、减、乘、除四则基本运算。它包括无符号数、有符号数的二进制算术运算和十进制算术运算调整指令,它们中有双操作数指令,也有单操作数指令。,3.2 算术运算指令,3.2.1 加法指令1.不带进位位的加法指令 ADD(Add)格式:ADD DEST,SRC;DEST(DEST)+(SRC)例:ADD AL,90H;ADD BX,23OOH;ADD SI,CX;ADD BX+DI,AX;ADD AX,BX+3000H;,3.2 算术运算指令,2.带进位位的加法指令ADC(Add with the carry)格式:ADC DEST,SRC;DEST(DEST)+(SRC)+CFADC与ADD指令的区别,是加进位标志CF。例:ADC AX,DI;AX AXDICF ADC BX,SI;BX(SI)+BX+CF ADC BX,1OOOH;BX BX+1OOOH+CF ADC AL,53;AL AL+53+CF,例:两个4字节的无符号数,分别放在2000H和2100H开始的存储单元中,低位在前,高位在后,两数相加运算后,和放在2000H开始的内存单元中。程序如下:CLC;清进位位CF MOV SI,2000H;取第一个数的首地址 MOV AX,SI;将第一个数的低16位取到AX MOV DI,2100H;取第二个数的首地址 ADC AX,DI;第一个数和第二个数的低16位及CF0相加 MOV SI,AX;低16位相加的结果送到2000H和2001H单元 MOV AX,SI+2;取第一个数的高16位送到AX中 ADC AX,DI+2;两个数的高l6位连同进位位相加 MOV SI+2,AX;高16位相加的结果送到2002H,2003H单元,3增量指令INC(Increment)格式:INC DEST;DEST(DEST)+1用于循环程序中修改指针和循环次数。例:INC CL;将CL中的内容加1 INC BX;将BX中的内容加1 INCBYTEPTRBX+SI+1500,3.2.2 减法指令1不带借位的减法指令 SUB(Subtract)格式:SUB DEST,SRC;DEST(DEST)(SRC)例:SUB AX,CX SUB BP+4,CL SUB AX,60 SUB SI,3010H SUB BYTE PTRDI,1OH 2.带借位的减法指令 SBB(Subtract with borrow)格式:SBB DEST,SRC;DEST(DEST)(SRC)CF例:SBB BX,1840H SBB WORD PTR SI+2,2OOOH,3.减量指令 DEC(Decrement)格式:DEC DEST;DEST(DEST)1例:DEC AX DEC BYTE PTR DI+5 4.取补指令 NEG(Negate)格式:NEG DEST;DEST0-(DEST)例:MOV AL,01110011B NEG AL;AL10001101B MOV BX,1111000011110000B NEG BX;BX0000111100010000B,5.比较指令CMP(Compare)格式:CMP DEST,SRC;FLAGS(DEST)(SRC)CMP执行两个数的相减操作,只影响标志寄存器(AF,CF,OF,SF,PF和ZF),不影响DEST。CMP后面要有一个条件转移指令,判断状态。,例:CMP AX,1000H;将AX的内容和1000H相减,影响标志位 CMP AX,BX+DI+100;将AX的值和字存储单元(BX+DI+100);数相比较,影响标志位,3.2.3 乘法指令1.无符号数乘法MUL(unsigned multiple)格式:MUL SRC;两字节相乘:AXAL*(SRC)两字相乘:(DX,AX)AX*(SRC),2.带符号数乘法IMUL(signed multiple)格式:IMUL SRC;两字节相乘:AXAL*(SRC),结果带符号两字相乘:(DX,AX)AX*(SRC),带符号,3.2.4 除法指令1.无符号数除法DIV(unsigned divide)格式:DIV SRC;168位:ALAX/(SRC)(商),AHAX/(SRC)(余数)3216位:AX(DX,AX)/(SRC)(商),DX(DX,AX)/(SRC)(余数)2有符号数除法IDIV(signed divide)格式:IDIV SRC;操作与DIV相同,但结果带符号。,3.2.5 符号扩展指令1.字节转换为字CBW(Convert byte into word)格式:CBW;将AL中的符号扩展到AH中。例:MOV AL,10011010B CBW;AX1111111110011010B2.字转换为双字CWD(Convert word into double word)格式:CWD;将AX中的符号扩展到DX中。,3.2.6 十进制调整指令 BCD(binary-coded decimal)是一种二进制的数字编码形式,是用二进制编码的十进制数,又称二进码十进数。它利用了4个二进制位来储存一个十进制的数码,由于常用的BCD码中从左到右每一位的1分别表示8、4、2、1,所以这种代码又称8421BCD码。在IBM-PC中,表示十进制数的BCD码有压缩BCD码和非压缩BCD码两种格式。所谓压缩BCD码格式(packed BCD format),指的是用4位二进制数表示一位BCD码,用一个字节表示的两位BCD码。非压缩型BCD码格式(unpacked BCD format)是指一个字节可存放一个一位十进制数,其中高4位的内容不做规定(也有部分书籍要求为0,二者均可),低4位二进制数表示该位十进制数,,1.压缩BCD码加法累加器调整指令DAA(Decimal Adjust for Addition),格式:DAA;对AL的值调整为正确的压缩BCD码。执行DAA前两个压缩型BCD码相加的结果已存于AL中。DAA调整的过程:若(AL&OFH)9 或标志 AF=1 则 ALAL+6,AF1 若 AL9FH或CF1 则 ALAL+60H,CF1 例:MOV AL,16H;AL=16 MOV CL,18H;BL=18 ADD AL,CL;AL=2EH,不符合1618=34 DAA;调整后,AL=34H,2压缩BCD码减法调整指令DAS(Decimal Adjust for Subtraction),格式:DAS;与DAA类似,将AL中的结果,调整为正确压缩BCD码 调整操作:若(AL&0FH)9或AF=1 则ALAL6,AF1 若AL9FH或CF=1 则ALAL60H,CF1 例:MOV AL,86H;AL=86 MOV BL,07H;BL7 SUB AL,BL;AL7FH,AF1,CF0 DAS;AL79H,AF1,CF0,3.非压缩BCD码加法累加器调整指令AAA(ASCII Adjust for Addition),格式:AAA 非压缩BCD码相加的结果已存于AL中,AAA调整AL为正确的非压缩BCD码。AAA调整的过程:若(AL&OFH)9 或标志 AF=1 则 ALAL+6,AHAH+1,AF1 CFAF,AL(AL&OFH)否则 AL(AL&OFH)例:MOV AL,09H;AL=9 MOV CL,08H;CL=8 ADD AL,CL;AL+CLAL=11H,与8+9=17不相符 AAA;调整后 AH=00000001(十位),AL=00000111(个位),4非压缩BCD码减法累加器调整指令AAS(ASCII Adjust for Subtraction),格式:AAS;与AAA类似,将AL中的减结果,调整为正确非压缩BCD码。调整操作:若(AL AL=08,AH=00H,AF=CF=1,5 AAM非压缩BCD码乘法调整指令,格式:AAM执行功能:将AL中的积值调整为非压缩BCD码并送回AX中。指令执行前必须先执行MUL指令,将两个非压缩BCD码相乘(此时要求其高四位为0),且积值保存在AL中。调整方法:把AL寄存器的内容除以0AH,商放在AH寄存器中,余数保存在AL寄存器中。该指令根据AL寄存器的内容设置SF、ZF和PF标志位,对CF、AF和OF标志位无定义。,6 AAD非压缩BCD码除法调整指令,格式:AAD执行功能:除法运算前,先对被除数AX的内容进行调整。调整方法:(AL)(AH)0AH+(AL),(AH)0若被除数是存放在AX中的两位非压缩BCD数,其中AH中为十位,AL中为个位,且AH和AL的高4位均为0;除数是一位非压缩BCD数,同样要求高4位为0,则这两个数用DIV指令相除前,必须先用AAD指令将AX中的被除数调整为二进制数,放在AL寄存器中。该指令根据AL寄存器的内容设置SF、ZF和PF标志位,对CF、AF和OF标志位无定义。,3.3 位操作指令,3.3.1 逻辑运算指令1.逻辑与AND(and)格式:AND DEST,SRC;DEST(DEST)(SRC)应用:与指令可使一个操作数在其它位不变情况下将某些位置0.要保持不变的位应与1相与要置0的位应与0相与。例:AND AL,0FH;高四位清零,低四位不变2.逻辑或OR(or)格式:OR DEST,SRC;DEST(DEST)(SRC)应用:或指令可以使一个操作数在其它位不变的情况下,将某些位置1.要保持不变的位应与0相或,要置1的位应与1相或。例:OR AL,02H;将D1位置置1,其他位不变。3.逻辑非NOT(not)格式:NOT DEST;DEST(DEST),4.逻辑异或XOR(exclusive or),格式:XOR DEST,SRC;(DEST)(DEST)(SRC)异或指令可以使一个操作数在其它位不变的情况下,将某些位取反。要保持不变的位应与0相异或,要取 反的位应与1相异或。常用在一些程序的开头使某个寄存器清0,以配合初始化工作的完成。例:XOR AX,AX;使累加器AX清0,CF=0。,5.测试指令TEST(test),格式:TEST DEST,SRC;FLAGS(DEST)(SRC)TEST指令一般用来检测指定位是1还是0,而这个指定位往往对应一个物理量。例如某一个状态寄存器的最低位反映一种状态,为1时说明信号满足要求,设某状态位连接到寄存器的D0位,检测时可以先将状态寄存器的内容读到AL中,再用TEST AL,01指令,此后就可以通过对ZF的判断来了解此状态位是否为1。如果ZF=1,说明结果为0,即状态位为0,条件不满足,如果ZF=0说明结果不为0,即状态位不为0,而为1,所以条件满足,3.3.2 移位指令,移位指令,可8位/16位操作数(OPRD)移1位或移CL位。1.非循环移位指令(1)算术左移指令 SAL(Shift Arithmetic Left)格式1:SAL OPRD,1;左移1位,最高位移入CF,最低位移入0格式2:SAL OPRD,CL;左移CL位,最高位移入CF,最低位移入0(2)逻辑左移指令 SHL(Shift Logic Left)格式1:SHL OPRD,1;同SAL 格式2:SHL OPRD,CL;同SAL,(3)算术右移指令 SAR(Shift Arithmetic Right)格式1:SAR OPRD,1;右移1位,最低位移入CF,最高位右移同时再填入最高位格式2:SAR OPRD,CL;右移CL位,最低位移入CF,最高位右移同时再填入最高位,(4)逻辑右移指令 SHR(Shift Logic Right)格式1:SHR OPRD,1;右移1位,最低位移入CF,最高位移入0 格式2:SHR OPRD,CL;右移CL位,最低位移入CF,最高位移入0,2.循环移位指令(1)不带进位位的循环左移指令 ROL(Rotate Left)格式1:ROL OPRD,1;OPRD左移1位,最高位移入CF,同时移回最低位格式2:ROL OPRD,CL;OPRD左移CL位,每次移位,最高位移入CF,同时移回最低位(2)不带进位位的循环右移指令 ROR(Rotate Right)格式1:ROR OPRD,1;OPRD右移1位,最低位移入CF,同时移回最高位格式2:ROR OPRD,CL;OPRD右移CL位,每次移位,最低位移入CF,同时移回最高位,(3)带进位位的循环左移指令 RCL(Rotate through CF Left)格式1:RCL OPRD,1;OPRD左移1位,最高位移入CF,原CF位移回最低位格式2:RCL OPRD,CL;OPRD左移CL位,每次移位,最高位移入CF,原CF位移回最低位(4)带进位位的循环右移指令 RCR(Rotate through CF Right)格式1:RCR OPRD,1;OPRD左移1位,最低位移入CF,原CF位移回最高位格式2:RCR OPRD,CL;OPRD左移CL位,每次移位,最低位移入CF,原CF位移回最高位,3.4 字符串操作指令,串传送 MOVS串比较 CMPS串扫描 SCAS串装入 LODS串送存 STOS,针对数据块或字符串的操作;可实现存储器到存储器的数据传送;待操作的数据串称为源串,目标地址称为目标串。,串操作指令的特点,源串一般存放在数据段,偏移地址由SI指定。允许段重设;目标串必须在附加段,偏移地址由DI指定;指令自动修改地址指针,修改方向由DF决定。DF=0 增地址方向;DF=1 减地址方向;数据块长度值由CX指定可增加自动重复前缀以实现自动修改CX内容。,串操作指令流程,取源串地址,取目标串地址,设串长度,传送一个字节或字,修改地址指针,修改串长度值,传送完否?,串传送MOVS(move string),把字节或字操作数从主存的源地址传送至目的地址,MOVSB;字节串传送:ES:DIDS:SI,;SISI1,DIDI1,MOVSW;字串传送:ES:DIDS:SI,;SISI2,DIDI2,指令应用程序,功能演示,MOVSB字节串正向传送,主存,地址低端,地址高端,30H,源操作数 DS:SI,目的操作数 ES:DI,DF0,正向传送,(SI)=(SI)+1,(DI)=(DI)+1,31H,30H,31H,MOVSB字节串反向传送,主存,地址低端,地址高端,30H,源操作数 DS:SI,目的操作数 ES:DI,DF1,反向传送,返回,(SI)=(SI)-1,(DI)=(DI)-1,31H,32H,32H,31H,例:字节串传送,mov si,offset sourcemov di,offset destinationmov cx,100;cx传送次数 cld;设置DF=0,实现地址增加again:movsb;传送一个字节(可否用movsw)dec cx;传送次数减1jnz again;判断传送次数cx是否为0;不为0,转移again位置执行;否则,结束,该段程序的功能是将数据段中由source指示的100个字节数据,传送到附加段由destination指示的主存区。,例:字串传送,mov si,offset sourcemov di,offset destinationmov cx,50;cx传送次数cld;设置DF=0,实现地址增加again:movsw;传送一个字(用movsb)dec cx;传送次数减1jnz again;判断传送次数cx是否为0;不为0(ZF=0),则转移again位置执行;否则,结束,串存储STOS(store string),把AL或AX数据传送至目的地址,STOSB;字节串存储:ES:DIAL,;DIDI1,STOSW;字串存储:ES:DIAX,;DIDI2,指令应用程序,例:串存储,mov ax,0mov di,0mov cx,8000h;cx传送次数(321024)cld;DF=0,地址增加again:stosw;传送一个字dec cx;传送次数减1jnz again;判断传送次数cx是否为0,程序段功能是什么?可以将CLD改为STD吗可不用给DI赋值吗如何改用STOSB,串读取LODS(load string),把指定主存单元的数据传送给AL或AX,LODSB;字节串读取:ALDS:SI,;SISI1,LODSW;字串读取:AXDS:SI,;SISI2,指令应用程序,例:串读取(上段:准备),mov si,offset blockmov di,offset dplusmov bx,offset dminusmov ax,dsmov es,ax;所有数据都在一个段中,所以设置es=dsmov cx,count;cx字节数cld,例3.6.5:串读取(下段:判断),go_on:lodsb;从block取出一个数据test al,80h;检测符号位,判断是正是负jnz minus;符号位为1,是负数,转向minusstosb;符号位为0,是正数,存入dplusjmp again;程序转移到again处继续执行minus:xchg bx,distosb;把负数存入dminusxchg bx,diagain:dec cx;字节数减1jnz go_on;完成正负数据分离,该段程序的功能是什么?,解释,该段程序的功能是什么?数据段DS中有一个数据块,具有count个字节,起始地址为block。现在要把其中的正数、负数分开,分别存入同一个段的两个缓冲区。存放正数的起始地址为dplus,存放负数的起始地址为dminus。,串比较CMPS(compare string),将主存中的源操作数减去至目的操作数,以便设置标志,进而比较两操作数之间的关系。,CMPSB;字节串比较:DS:SIES:DI;SISI1,DIDI1,CMPSW;字串比较:DS:SIES:DI,;SISI2,DIDI2,指令应用程序,例:比较字符串是否相同,mov si,offset string1mov di,offset string2mov cx,countcldagain:cmpsb;比较两个字符jnz unmat;有不同字符,转移到unmatdec cxjnz again;进行下一个字符的比较mov al,0;字符串相等,设置00h标记jmp output;转向outputunmat:mov al,0ffh;设置ffh标记output:mov result,al;输出结果标记,串扫描SCAS(scan string),将AL/AX减去至目的操作数,以便设置标志,进而比较AL/AX与操作数之间的关系。,SCASB;字节串扫描:ALES:DI,;DIDI1,SCASW;字串扫描:AXES:DI,;DIDI2,指令应用程序,例:查找字符串中的空格,mov di,offset stringmov al,20hmov cx,countcldagain:scasb;搜索jz found;为0(ZF=1),发现空格dec cx;不是空格jnz again;搜索下一个字符.;不含空格,则继续执行found:.,重复前缀指令(repeat),串操作指令执行一次,仅对数据串中的一个字节或字量进行操作。但在串操作指令前,可以加一个重复前缀,实现串操作的重复执行。重复次数隐含在CX寄存器中。重复前缀分2类,3条指令:配合不影响标志的MOVS、STOS(和LODS)指令的REP前缀配合影响标志的CMPS和SCAS指令的REPZ和REPNZ前缀,REP重复前缀指令,REP前缀可以理解为:当数据串没有结束(CX0),则继续传送,REP;每执行一次串指令,CX减1;直到CX0,重复执行结束,例3.6.8:串传送,mov si,offset sourcemov di,offset destinationmov cx,100;cx传送次数cldrep movsb,again:movsb;传送一个字节dec cx;传送次数减1jnz again;判断传送次数cx是否为0;不为0(ZF=0),则转移again位置执行;否则,结束,REPZ/REPNZ重复前缀指令,REPZ/REPE当数据串没有结束(CX0),并且串相等(ZF1),则继续比较。REPNZ/REPNE当数据串没有结束(CX0),并且串不相等(ZF0),则继续比较。,REPZ;每执行一次串指令,CX减1;并判断ZF是否为0,;只要CX0或ZF0,重复执行结束,REPNZ;每执行一次串指令,CX减1;并判断ZF是否为1,;只要CX0或ZF1,重复执行结束,3.5.1 32位指令运行环境32位的80 x86微处理器有3种工作模式:实模式、保护模式和虚拟8086模式。1)实模式实模式是为了和8086处理器兼容而设置的。在实模式下,80386处理器就相当于一个快速的8086处理器。,3.5 32位CPU扩展的指令,2)保护模式保护模式是80386处理器的主要工作模式。当80386工作在保护模式下时,它的所有功能都是可用的。,3)虚拟8086模式为了在保护模式下继续提供和8086处理器的兼容,80386又设计了一种虚拟8086模式,以便可以在保护模式的多任务条件下,有的任务运行32位程序,有的任务运行MS-DOS程序。,3.5.2 32位CPU寄存器组和寻址方式的变化,80386微处理器共有7类34个寄存器,包括通用寄存器组、段寄存器、指令指针和标志寄存器、系统地址寄存器、控制寄存器、调试寄存器、测试寄存器。通常应用程序主要使用前3类,标志寄存器EFLAGS,标志寄存器EFLAGS,由8086的FLAGS寄存器扩展而来,低12位与8086的标志寄存器FLAGS的低12位含义完全相同,其他各标志位的含义如下:,IOPL(I/O privilege level)占两个二进制位,表示I/O特权级。如果当前特权级小于或等于IOPL,就可以执行I/O操作,否则将出现一个保护性异常。IOPL只能由特权级为0的程序或任务来修改。NT(nested task)表示嵌套任务,用于控制中断返回指令IRET。当NT=0时,用堆栈中保存的值恢复EFLAGS、CS和EIP,从而实现返回;若NT=1,则通过任务切换实现中断返回。,VM(virtual-8086 mode)表示虚拟8086模式。如果VM被置位且80386已处于保护模式下,则CPU切换到虚拟8086模式,此时,对段的任何操作又回到了实模式,如同在8086下运行一样。RF(resume flag)表示恢复标志(又称重启标志),与调试寄存器一起用于断点和单步操作。当RF=1时,下一条指令的任何调试故障将被忽略,不产生异常中断;当RF=0时,调试故障被接受,并产生异常中断(常用于调试失败后,强迫程序恢复执行,在成功执行每条指令后,RF自动复位)。,AC(alignment check)表示对齐检查(只有运行在特权级3的程序才执行地址对齐检查,特权级0、1、2忽略该标志)。当AC=1且CR0中的AM=1时,允许存储器进行地址对齐(指当访问一个字时,其地址必须是偶数;当访问双字时,其地址必须是4的倍数)检查,若发现地址未对齐,则将产生异常中断。VIF(virtual interrupt flag)表示虚拟中断标志。当VIF=1时,可以使用虚拟中断;当VIF=0时,不能使用虚拟中断。,VIP(virtual interrupt pending flag)表示虚拟中断挂起标志。当VIP=1时,VIF有效;当VIP=0时,VIF无效。ID(identification flag)表示鉴别标志。该标志用来指示Pentium CPU是否支持CPUID的指令。,8086的16位寻址方式同样适用于32位x86CPU,只不过是将立即数、寄存器、存储器有效地址扩充到了32位,而且8个32位通用寄存器都可以当做基址寄存器,除了ESP外的另外7个通用寄存器都可以当做变址寄存器使用。除此之外,Intel 32位CPU还提供3种带比例因子、仅适用于32位CPU的寻址方式:比例变址寻址、基址比例变址寻址和相对基址比例变址寻址。,比例因子可以是1、2、4或8。默认比例因子是1,不要求包含在汇编语言指令中。比例因子2用来寻址字存储器数组,比例因子4用来寻址双字存储器数组,而比例因子8用来寻址四字存储器数组。,32位存储器寻址方式的组成公式可总结为为:32位有效地址=基址寄存器(变址寄存器比例)位移量其中的3个组成部分是:(1)基址寄存器任何8个32位通用寄存器之一。(2)变址寄存器除ESP之外的任何32位通用寄存器之一。(3)比例可以是1248(因为操作数的长度可以是1248字节)。,3.5.3 32位扩展增强指令,1)数据传送类指令主要包括如下一些指令:(1)PUSH i8/i16/i32该指令把16位或32位立即数i16i32压入堆栈。若是8位立即数i8,则经符号扩展成16位后再压入堆栈。(2)由于32位x86CPU新增了FS和GS段寄存器,所以可对它们进行堆栈操作。(3)PUSHA顺序压入AX,CX,DX,BX,SP(指令执前),BP,SI,DI;POPA栈顶的16个字节依次出栈到DI,SI,BP,SP,BX,DX,CX,AX,其中应进入SP的值丢弃,SP通过加16来恢复,(4)PUSHAD顺序压入EAX,ECX,EDX,EBX,ESP(指令执前),EBP,ESI,EDI;POPAD栈顶的32个字节依次出栈到EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX,其中应进入ESP的值丢弃,SP通过加32来恢复(5)PUSH

    注意事项

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

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开