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

    微机原理课件第三章8086的寻址方式和指令系统.ppt

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

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

    微机原理课件第三章8086的寻址方式和指令系统.ppt

    1,微型计算机原理及其应用第三章:8086的寻址方式和指令系统,2,第三章 8086的寻址方式和指令系统,8086的寻址方式指令的机器码表示方法8086的指令系统,3,3-1 8086的寻址方式,指令由操作码和操作数两部分组成 操作码:指出所要执行的操作(操作的性质)操作数:指出所需的操作数据(操作的对象)根据操作数的个数,指令可分为:双操作数指令:前者为目的操作数,后者为源操作数 单操作数指令:只有一个操作数:如NOT,INC等 有两个操作数,隐含其中一个:如PUSH,POP等 无操作数指令:没有操作数:NOP 隐含一个操作数:CLI,CLD等,4,根据操作数的来源,可分为:立即数:数据直接放在指令代码中 寄存器操作数:存放在CPU内部的寄存器中 存储器操作数:存放在内部存储器中(绝大部分情况)I/O端口操作数:存放在接口电路的寄存器中(适用于IN/OUT指令)指令中的操作数部分可以是操作数本身,也可以是操作数地址或地址的一部分,还可以是指向操作数地址的指针或其他有关操作数的信息。,5,寻址方式:指令中说明操作数所在地址的方法。寻址方式的多少反映了寻找操作数的灵活程度,寻址方式越多,则计算机的功能越强,灵活性也越大,能更有效地处理各种数据。执行速度最快的两种寻址为寄存器寻址和立即数寻址。8086中主要的七种寻址方式如下:(与数据有关的寻址方式),6,1、立即寻址方式(Immediate Addressing)操作数就在指令中,常用来给寄存器赋初值。如:MOV AX,2000H MOV BL,12H,7,注:a、立即数只能作源,不能作目的 MOV 2000H,AX 非法。b、若16进制立即数以AF打头,为区别其他符号名,应在前面加数字0,因符号名的命名规则为第一个字符不能为数字。如:MOV AX,0F123H c、若用等值伪指令EQU定义的为符号常量名,如:COUNT EQU 100 MOV AX,COUNT 此处COUNT即为立即寻址。,8,2、寄存器寻址方式(Register Addressing)操作数在指定的寄存器中 因寄存器位于CPU内部,其执行速度最高。如:MOV AX,BX MOV AL,BL 注:源和目的的长度应一致。,9,下面五种(37)属于存储器寻址,由于操作数来自内存中,要耗用总线周期才能访问到,故执行速度较前两种寻址方式要慢。要寻找到存储器操作数,必须提供完整的逻辑地址(段基址:偏移地址),而指令中一般只提供偏移地址(又称为有效地址EA),段基址的来源只需参考段寄存器与偏移地址寄存器的基本约定,或用段超越前缀提供。两者叠加算出物理地址PA(Physical Address)。根据有效地址EA(Effective Address)的构成方式,存储器寻址分为以下五种:,10,段寄存器使用的基本约定,11,3、直接寻址方式(Direct Addressing)EA就在指令中,默认段寄存器为DS如:MOV AX,2000H 设DS=3000H则EA=2000H,PA=DS16+EA=32000H,操作数来自32000H(或3000H:2000H处),结果AX=3514H,12,注:a、可使用段超越前缀指定其它段寄存器 如:MOV AX,ES:2000H b、在汇编语言中,可以用符号地址代替数值地址,实际上是给存储单元起一个名字。如:COUNT DW 1234H MOV AX,COUNT 直接寻址 或 MOV AX,COUNT 其中DW为定义字变量(Define Word)伪指令,说明符号地址COUNT处存放着一个字,字内容为1234H,结果AX=1234HDW与EQU定义符号的不同点:寻址方式不同;用DW定义,COUNT单元中的内容可修改,用EQU定义,COUNT为常数。,13,4、寄存器间接寻址方式(Register Indirect Addressing)EA在指定的寄存器中,只能是基址BX、BP,变址SI、DI四者之一。MOV AX,DX(非法)默认关系:SS:BP,DS:BX、SI、DI 可进行段超越,如 MOV AX,DS:BP,14,例:MOV AX,BX已知BX=5000H,DS=3000H,则EA=(BX)=5000H,PA=DS16+EA=35000H该指令执行完,AX=32A0H,15,5、寄存器相对寻址方式(Register Relative Addressing)EA=(BX、BP、SI、DI之一)+(8位或16位位移量)默认关系及段超越同寄存器间接寻址,16,例:MOV AX,COUNTDI或MOV AX,COUNT+DI已知:DI=1000H,DS=3000H,位移量COUNT=0510H则EA=(DI)+COUNT=1510H,PA=DS16+EA=31510H,该指令执行完,AX=5698H,17,6、基址变址寻址方式(Based Indexed Addressing)EA=基址(BX、BP之一)+变址(SI、DI之一)默认关系取决于使用的基址寄存器,只要出现BP即默认SS,也可进行段超越。只有四种组合:BX+SI,BX+DI均与DS结合 BP+SI,BP+DI均与SS结合注意:MOV AX,BX+BP及MOV AX,SI+DI非法。,18,如:MOV AX,BX+SI或MOV AX,BXSI设BX=2000H,DS=5000H,SI=0006H,则EA=(BX)+(SI)=2006H,PA=(DS)16+EA=52006H则该指令执行后,AX=AB78H。,MOV AX,BX+SI,19,7、相对基址变址寻址方式(Relative Based Indexed Addressing)EA=(BX、BP之一)+(SI、DI之一)+偏移量(8、16位)默认关系与段超越同基址变址寻址。例如:MOV AX,COUNTBXSI MOV AX,COUNTBX+SI MOV AX,BX+SI+COUNT以上三者等价,20,如 MOVAX,MASKBXSI 设DS=4100H,位移量MASK=0134H,BX=2500H,SI=1200H 则EA=(BX)+(SI)+MASK=3834H,PA=(DS)16+EA=44834H,该指令执行完后,AX=5698H,21,其它寻址方式1、隐含寻址:DAA 隐含对AL中数据进行十进制调整。2、I/O端口寻址:直接端口:前256个端口,端口号范围(OOHFFH),可直接出现在指令中,如IN AL,23H;OUT 56H,AL 间接端口:端口号范围0000FFFFH,共64K个端口,由DX间接提供,如:MOV DX,1000H IN AL,DX3、一条指令中含几种寻址方式 如:MOV BX,AL 完整描述:源操作数采用寄存器寻址,目的操作数采用寄存器间接寻址。4、转移类指令寻址(与转移地址有关的寻址方式)段内直接、段内间接、段间直接、段间间接共四种(将在控制转移指令中介绍),22,3-2 指令的机器码表示方法,一、基本概念 汇编语言源程序:用汇编语言编写的程序。汇编程序:将汇编语言源程序翻译成二进制代码 的目标程序(机器语言指令)的工具。汇编:将汇编语言源程序翻译成机器语言的过程。汇编 汇编语言源程序-目标程序(汇编程序)二、机器语言指令的编码特点 8086指令系统采用变长指令,长度由16字节组成。,23,1、最短为单字节指令:只包含8位操作码,没有操作数,如CLC等。2、最长为6字节指令:如MOV BX+2100H,1234H 操作码1字节,寻址方式1字节,16位位移量2字节,16位立即数2字节三、机器语言指令代码的编制 介绍手工汇编的规律(略)但目前已有宏汇编程序(MASM等),可实现机器汇编(自动汇编)。,24,3-3 8086的指令系统,通常一条指令对应着一种基本操作。计算机所能执行的全部指令,构成了计算机的指令系统。计算机的主要功能由指令系统来体现。一般来说,若某台计算机的指令越丰富,寻址方式越多,且每条指令的执行速度都较快,则它的总体功能越强。每种计算机都有自己固有的指令系统。8086的指令按功能可分为六大类:数据传送指令、算术运算指令、逻辑运算和移位指令、字符串处理指令、控制转移指令、处理器控制指令。,25,一、数据传送指令:负责数据在寄存器、存储器、I/O端口之间的传递,特点是不影响标志位。1.通用数据传送指令(1)MOV 传送指令(Move)格式:MOV 目的,源;(源)(目的),26,MOV指令使用规则:立即数不能直接传入段寄存器 MOV DS,2000H(非法)立即数不能作为目的操作数 MOV 2000H,AX(非法)两个段寄存器之间不能直接传送 MOV DS,ES(非法)源、目的操作数不能同时为存储器操作数(两内存单元之间不能直接用MOV传送)MOV BX,2000H(非法)段寄存器CS不能作为目的操作数,但可作为源操作数 MOV CS,AX(非法),27,源和目的操作数字长应一致(8位立即数16位寄存器例外)MOV AX,BL 非法;指令中至少要有一项明确说明传送的是字节还是字,故8位立即数送内存操作时,要用类型说明符BYTE PTR或WORD PTR指明内存类型 MOV 2000H,12H 非法 可改为:MOV BYTE PTR2000H,12H;字节操作 MOV WORD PTR2000H,12H;字操作IP和PSW不能出现在MOV指令中,28,(2)堆栈操作指令 PUSH 源;进栈指令SP-2SP源栈顶 POP 目的;出栈指令 栈顶目的SP+2 SP注意:只能对字操作,不能对字节操作;PUSH AL(非法)立即数不能入栈;PUSH 2000H(非法)CS可入栈,但不能弹出内容到CS PUSH CS(合法)POP CS(非法),29,堆栈主要用于保护和恢复数据,也可进行数据交换。规定由SS指示堆栈段的段基址,SP始终指向堆栈的顶部,SP的初值规定了所用堆栈段的大小。堆栈的最高地址叫栈底。,SP,SS,堆栈段,进栈方向,退栈方向,栈底,栈顶,30,(3)XCHG 交换指令(Exchange)格式:XCHG OPR1,OPR2;寄存器之间,寄存器与存储器之间执行操作:(OPR1)(OPR2)注意:立即数不能出现在交换指令中;段寄存器不能出现在交换指令中;存储单元之间不能直接交换;XCHG 1000H,2000H(非法),31,(4)XLAT 表转换指令(换码、查表)(Translation)格式:XLAT 或 XLAT 转换表名 功能:完成一个字节的查表转换。(DS)16(BX)+(AL)AL 步骤:首先在内存中建表;(TABLE DB)使BX指向表的首地址;(MOV BX,OFFSET TABLE)查表中某项时,将该项相对于表首地址 的偏移量AL;(MOV AL,5)执行XLAT,转换后的结果AL。(AL=12H,即5的七段显示码),32,2.输入输出指令:累加器(AX或AL)I/O端口(1)IN AX(或AL),端口地址;输入(Input)指令(2)OUT 端口地址,AX(或AL);输出(Output)指令直接I/O指令:端口号直接出现在指令中,寻址范围为0255,最大端口号为FFH(255)如:IN AL,12H OUT 34H,AL间接I/O指令:端口号由DX间接指定,可寻址范围为整个64K个端口(0000H FFFFH)注:I/O指令中的其中一个操作数必为累加器(AL或AX),如为AX,则为16位端口的字操作,16位端口由两个 地址连续的8位端口组成。如:MOV DX,300H OUT DX,AX,AL 300H端口AH 301H端口,33,3.地址目标传送指令:将地址(段地址和偏移地址)送入指定的寄存器。(1)LEA 取有效地址指令(Load Effective Address)格式:LEA 目的,源;源的EA目的寄存器功能:常用于使某个寄存器作为地址指针。注意:a、源只能是存储器操作数,不能为立即数或寄存器操作数;b、目的只能为16位寄存器,不能为8位寄存器及段寄存器。,34,注意:LEA SP,BX及MOV SP,BX的区别例:设BX=1234H,DS=2000H,(21234H)=78H,(21235H)=56H 则LEA执行完后,SP=1234H MOV执行完后,SP=5678H总结:设置地址指针有2种方法。LEA BX,TABLE MOV BX,OFFSET TABLE 上面两条指令等价。,35,(2)LDS 双字指针送DS和寄存器指令(Load Pointer using DS)格式为:LDS 目的,源;目的和源的规定同LEA功能:将源指向的前2个字节内容(EA)目的(常用SI)将源指向的后2个字节内容(段基址)DS(3)LES 双字指针送ES和寄存器指令(Load Pointer using ES)注意:双字指针包含完整的段基址和偏移地址。双字指针在内存中存放占用连续的4个字节地址,规律为:偏移地址(或EA)低地址字单元 段基址高地址字单元,36,4.标志传送指令:读出或改写PSW(1)LAHF;PSW的低位字节AH(Load AH from Flags)(2)SAHF;PSW的低位字节AH(Store AH into Flags)(3)PUSHF;PSW内容入栈(Push Flags onto Stack)(4)POPF;栈顶内容弹出到PSW(Pop Flags off Stack)注意:前两条为兼容8位CPU的指令,不常用;后两条(PUSHF和POPF)一般成对出现于子程序和中断服务程序的开头和结尾处,用于保护和恢复现场。,37,总结:数据传送指令中除SAHF及POPF外,均不影响PSW中的各标志位。,38,二、算术运算指令:加、减、乘、除 特点:均影响PSW中的状态标志位。计算机中的数分为:(1)二进制 无符号:所有位均为数值位。带符号:最高位表示符号位,0正1负,用补码表示。(2)十进制 压缩:每4位表示一个十进制数位,1个字节可表示2位十进制数 非压缩:1个字节表示1位十进制数(只用低4位表示十进制数位,高4位为0或无意义)如:19D=压缩:0001,1001BCD(即19H)=非压缩:0000,0001,0000,1001BCD(即0109H),39,双操作数指令:其中至少有一个为寄存器操作数,但不能为段寄存器(立即数与存储器运算结果存储器除外)单操作数指令:不能为立即数及段寄存器结论:(1)加减运算:无符号数与带符号数可采用同一套指令。(2)乘除运算:无符号数与带符号数有各自的一套指令。注意:在二进制加减运算中,CF:衡量无符号数运算的结果是否有进位 OF:衡量带符号数运算的结果是否有溢出,40,1.加法指令(1)ADD 加法指令(Addition)格式:ADD 目的,源;源+目的目的 a.影响所有状态标志 b.段寄存器不能出现 c.两个操作数不能同为存储器操作数 d.类型一致(B/W)(2)ADC 带进位加法指令(Addition with Carry)功能:除两操作数相加外,还应加上CF(源+目的+CF目的)用于多字(多字节)加法运算中的高字(高字节)加法中如双精度数运算(指双字数据,即32位长度),41,(3)INC 增量指令(加1指令)(Increment)格式:INC 目的;目的+1目的单操作数指令,影响除CF之外的其余5个状态标志。功能:a.修改地址指针(增量修改)b.修改循环计数器(正计数法)如为存储器操作数,则应加上类型说明符PTR进行说明。如:INC BX(非法)可改为:INC BYTE PTR BX;字节操作 INC WORD PTR BX;字操作,42,(4)DAA 压缩BCD码加法调整指令(Decimal Adjust for Addition)调整原理:化16进1(每4个二进制位为一体)为逢10进1例:08H+07H 应得15H 对0FH+6调整(因F非BCD码)09H+09H 应得18H 对12H+6调整(因AF=1)结论:如AF=1或低4位二进制数码对应的BCD码大于9时,则加6进行调整;往上则考查CF是否为1。DAA 隐含对AL中的数据调整成压缩BCD码形式,应紧跟ADD或ADC指令之后。典型应用:ADD(或ADC)AL,源;二进制加法 DAA;调整为十进制结果,43,具体调整方法:a.如AF=1或AL中低4位为AF,则AL+06HAL且使AF=1;b.如CF=1或AL中高4位为AF,则AL+60HAL且使CF=1;对AL中二进制加法结果用DAA调整后,AL可能:不变(高、低4位均未调整,AF=CF=0)+06H(只调整了低4位,AF=1,CF=0)+60H(只调整了高4位,CF=1,AF=0)+66H(高、低4位均调整,AF=CF=1)【例如】ADD AL,BL DAA若执行前:AL=28H,BL=68H,则执行ADD后:AL=90H,CF=0,AF=1;执行DAA指令后:AL=96H,CF=0,AF=1。,44,(5)AAA 非压缩BCD码加法调整(ASCII Adjust for Addition)隐含对AL进行调整,但调整后影响AH。应用情况同DAA,紧跟ADD或ADC指令之后。调整方法:a、AL低4位如为AF或AF=1 则AL+6AL,AH+1AH,使AF=1 b、清AL高4位 c、AF值送CF特点:执行后AF和CF只能为相同值。,45,2.减法指令(1)SUB 减法指令(Subtraction)格式 SUB 目的,源;目的-源目的(2)SBB 带借位的减法指令(Subtract with Borrow)格式:SBB 目的,源;目的-源-CF目的 进/借位标志用于多字节(多字)减法运算中。(3)DEC 减量指令(减1指令)(Decrement)格式:DEC 目的;目的-1目的影响除CF之外的其余5个状态标志功能:修改地址指针(减量修改)修改循环计数器(减计数法)注意:由于是单操作数指令,如为存储器操作数,应加类型说明符PTR进行说明。,46,(4)NEG 求补(取负)指令(Negate)格式:NEG 目的;0-目的目的功能:正数变负数,负数变正数。NEG例如:11111111(-1的补码)00000001(+1的补码)可用于求负数的绝对值单操作数指令,规定同INC、DEC指令。(5)CMP 比较指令(Compare)格式:CMP 目的,源;目的-源(但不保存结果)实质上是相减操作,但不保存相减的结果,只是减法运算影响各标志位。希望比较两个数的大小,而又不破坏两个操作数的场合。其后一般紧跟条件转移指令。,47,CMP指令主要用来比较两数大小、相等关系。比较两个数是否相等,看ZF标志位,ZF=1则相等比较两数大小时 a.无符号数:看CF标志位(是否够减)CF=0,无借位,被减数大,减数小 CF=1,有借位,被减数小,减数大 b.带符号数:看SF和OF标志位 SFOF=0 SF=0,0F=0 被减数大,SF=1,0F=1 减数小 SF0F=1 SF=1,0F=0 被减数小,SF=0,0F=1 减数大,48,(6)DAS 压缩BCD码减法调整指令(Decimal Adjust for Subtraction)应紧跟在SUB或SBB之后,隐含对AL中数据的调整。格式:SUB(或SBB)AL,源 DAS 具体调整:相应位减06H(置AF位)及减60H(置CF位)经DAS后,AL有可能不变、-06H、-60H、-66H。(7)AAS 非压缩BCD码减法调整指令(ASCII Adjust for Subtraction)隐含对AL进行调整,但调整后影响AH。AF和CF只能为相同值。总结:BCD码的加法调整和减法调整指令都隐含操作数在AL中,即对AL中结果进行调整。因此对BCD数据的加减运算只能以字节为单位,如果以字为单位进行加减,则低字节向高字节的进位及高字节中的低半字节向高半字节的进位均无法判断,失去了调整的依据。,49,3.乘法指令(1)MUL 无符号数乘法指令(Multiply)格式:MUL 源(2)IMUL 带符号数乘法指令(Integer Multiply)格式:IMUL 源 隐含被乘数来源于与源操作数长度相等的累加器中(AX或AL)字节乘法:字节(AL)*字节(源)字(AX)字乘法:字(AX)*字(源)双字(DX,AX)若指令中为存储器操作数,也需应用PTR指明其类型。,50,乘法指令只影响0F和CF位(且同时影响),其余无定义(状态不定)(1)对于MUL,字节乘法后AH=0或字乘法后DX=0,则0F=CF=0,否则均为1(2)对于IMUL,如果乘积的高一半是低一半的符号扩展,则CF=0F=0,否则均为1(即看结果的高一半是否包含有效数字位)利用OF和CF状态可决定是否需要保存积的高位字节或高位字。注:带符号数的乘法是先化为正数正数的形式,如结果应为负,再对结果取补码即可。,51,(3)AAM 非压缩BCD码乘法调整指令(ASCII Adjust for Multiply)对存于AL中的两个非压缩十进制数相乘的乘积进行调整,结果存于AX中。具体调整过程:AL10 AH(商)AL(余数)注:BCD码的乘法要求两个乘数均为非压缩BCD码,且为字节数据,这样8位*8位=16位(结果高8位必为00H,因最大乘法9*9=81,只需AL就可放下),因此只需对AL中结果进行调整。,52,【例】MUL BL AAM若执行前:AL=06H,BL=09H,则执行MUL BL 后,AX=0036H,再执行AAM指令后,正确的结果为:AH=05H,AL=04H。,53,4.除法指令(1)DIV 无符号数除法指令(Divide)格式:DIV 源(2)IDIV 带符号数除法指令(Integer Divide)格式:IDIV 源隐含被除数 字节除法:字(AX)字节(源)AL(商),AH(余数)字除法:双字(DX,AX)字(源)AX(商),DX(余数)注意:除法操作后,若结果超出商的表示范围(AL或AX放不下),则看作除法为0的情况,产生0号中断;IDIV指令执行后,余数的符号一定要和被除数相同;在作除法前,保证被除数一定为除数的两倍长度,否则要进行扩展;,54,无符号数:清除AH(字节除法)或DX(字除法)带符号数:要进行符号扩展:两条符号扩展指令如下:(3)CBW 字节转换为字指令(Convert Byte to Word)功能:AL中的字节AX中的字(字节除法)若AL最高有效位D7=0,则AH=0;若AL最高有效位D7=1,则AH=FFH。(4)CWD 字转换为双字指令(Convert Word to Double Word)功能:AX中的字DX,AX中的双字(字除法)若AX最高有效位D15=0,则DX=0;若AX最高有效位D15=1,则DX=FFFFH。,55,【例】5678H1234H MOV AX,5678H;被除数 MOV BX,1234H;除数 MOV DX,0 或 CWD;被除数扩展 DIV BX 或 IDIV BX;执行除法,56,(5)AAD 非压缩BCD除法调整指令(ASCII Adjust for Divide)BCD码的除法要求两操作数均为非压缩BCD码,且只能进行字节除法,即168=8余8,其中被除法来自AX中。调整方法是在作除法之前对被除数进行调整:AH*10+ALAL 0AH,57,【例】将十进制数45除以7,商和余数分别存于数据段1000H和1001H单元。MOV AX,0405H;非压缩BCD码形式 MOV BL,07H;除数 AAD;AL=2DH=45D,AH=0 DIV BL MOV 1000H,AL;存商,AL=6 MOV 1001H,AH;存余数,AH=3注:如不用AAD调整,则0405H=4*256+5=1029,除以7之后结果为147余0。,58,总结:BCD码运用指令中,对加、减、乘,先是利用普通二进制运算指令算出二进制结果,然后用专门调整指令对结果进行调整,对于除法,则是先对被除数进行调整,再用普通除法指令进行运算。,59,三、逻辑运算和移位指令(位处理指令)特点:按位操作,必须化为二进制1.逻辑运算指令操作数规定同算术运算指令双操作数指令:使CF=0F=0,AF无定义,影响SF、ZF、PF单操作数指令(NOT):不影响标志位(1)AND 逻辑与指令(Logical And)运算规则:全1出1,有0出0某些位保持不变(与“1”),另外一些位屏蔽掉(与“0”)例:AND AL,OFH;屏蔽AL高4位,低4位保持不变,60,(2)OR 逻辑或指令(Logical Or)运算规则:有1出1,全0出0某些位保持不变(或“0”),另外一些位置1(或“1”)例:OR AL,0FH;使AL低4位置1,高4位保持不变(3)XOR 异或指令(Exclusive Or)运算规则:相同为0,相异为1某些位保持不变(异或“0”),另外一些位取反(异或“1”)例:XOR AL,OFH;使AL低4位取反,高4位保持不变用于判断两个数是否相等:XOR AX,BX实现某个操作数清零:XOR AX,AX使操作数各位取反:XOR AX,0FFFFH,61,(4)NOT 取反指令(Logical Not)运算规则:按位取反 如操作数为存储器操作数,应用PTR指明其类型。NOT AL INC AL 等价于 NEG AL(5)TEST 测试指令(Test)功能:进行“与”运算,但不保存结果,影响标志位。用于在不想改变两数的情况下,检测某位或某几位是否满足条件,后面紧跟条件转移指令,从而引出分支。一般情况下,TEST指令的源操作数设置为一个立即数,其中需要测试的位为1,其它位为0。测试正负数:TEST AL,80H 或 TEST AX,8000H 之后判断ZF=1,正数;ZF=0,负数测试奇偶数:TEST AL,01H 或 TEST AX,0001H 之后判断ZF=1,偶数;ZF=0,奇数,62,2.算术逻辑移位指令(非循环移位)特点:移位后操作数逐渐丢失格式:操作码 目的,移位次数注意:a.移位次数为1,可直接出现在指令中,移位次数如大于1,则应将其放入CL中,由CL间接指定;b.影响CF、OF、PF、SF、ZF,但AF位无定义c.移位前后如符号位发生变化,则OF置1,(移位次数1,则OF不确定),而CF为最后移出的一位。,63,(1)SHL 逻辑左移指令(Shift Logical Left)(2)SAL 算术左移指令(Shift Arithmetic Left)两者功能相同,左移1位相当于乘2运算(3)SHR 逻辑右移指令(Shift Logical Right)右移1位相当于无符号数除2运算(4)SAR 算术右移指令(Shift Arithmetic Right)将操作数看成带符号数,移位过程中符号位保持不变。右移1位相当于带符号数除2运算注:因移位指令执行速度快,而乘除法执行速度慢,故常用来编制乘除法程序。,64,【例】AL*5AL(不计溢出)MOV BL,AL;暂存原始值 MOV CL,2;移位次数 SHL(或SAL)AL,CL ADD AL,BL,65,3.循环移位指令特点:移位后不丢失有效位格式及操作数规定同算术逻辑移位指令。(1)ROL 循环左移指令(Rotate Left)(2)ROR 循环右移指令(Rotate Right)(3)RCL 带进位循环左移指令(Rotate through Carry Left)(4)RCR 带进位循环右移指令(Rotate through Carry Right)其中RCL和RCR将CF也包含在循环圈中。,66,四、字符串处理指令功能:用一条指令实现对一串字符或数据的操作(字节串/字串)串处理的隐含约定:(1)源串由DS:SI指向(可进行段超越)(2)目的串由ES:DI指向(固定组合)(3)SI、DI自动修改(1字节串,2字串)(4)DF控制串处理的方向 DF=0,增量修改SI、DI(+1或+2),CLD指令 DF=1,减量修改SI、DI(-1或-2),STD指令(5)串长度(字节数或字数)由CX指定,67,为加快执行速度,可在基本指令前加三种重复前缀。(1)REP 无条件重复(重复条件:CX0)用于MOVS和STOS前面(2)REPE/REPZ 相等/结果为0则重复(重复条件:CX0且ZF=1)用于CMPS和SCAS前面(3)REPNE/REPNZ 不相等/结果非0则重复(重复条件:CX0且ZF=0)用于CMPS和SCAS前面,68,1.MOVS 字符串传送指令(Move String)格式:a.MOVS 目的串,源串 b.MOVSB/MOVSW;字节串或字串传送执行的操作:(1)(DS:SI)(ES:DI)(2)SI 1SI,DI 1DI 或SI 2SI,DI 2DI注:DF=0,用“+”;当DF=1时,用“-”字节串 1,字串 2,69,与REP前缀联用:REP MOVSB/MOVSW操作:(1)若CX=0,则退出串处理(2)CX-1CX(3)执行一次MOVSB/MOVSW,跳回(1)所以,应用之前需完成4件事:DS:SI指向源串 ES:DI指向目的串 数据串的长度CX CLD或STD决定串处理方向【例】将数据段中以SRC_MESS为偏移地址的一串字符“HELLO!”,传送到附加段中以NEW_LOC开始的单元中。,70,DATA SEGMENT;数据段SRC_MESS DB HELLO!;源串DATA ENDSEXTRA SEGMENT;附加段NEW_LOC DB 6 DUP(?);目的串EXTRA ENDSCODE SEGMENT;代码段 ASSUME CS:CODE,DS:DATA,ES:EXTRA;段分配START:MOV AX,DATA MOV DS,AX;初始化DS MOV AX,EXTRA MOV ES,AX;初始化ES,71,LEA SI,SRC_MESS;SI指向源串 LEA DI,NEW_LOC;DI指向目的串 MOV CX,6;CX存放串长度 CLD;增量修改地址指针 REP MOVSB;重复串传送CODE ENDS END START;源程序结束执行完后,SI=SRC_MESS+6,DI=NEW_LOC+6,CX=0,72,【例】将数据段中偏移地址为1000H开始的一串字符“HELLO!”传送到附加段中偏移地址为2000H开始的单元中。MOV SI,1000H MOV DI,2000H MOV CX,6 CLD REP MOVSB执行完后,SI=1006H,DI=2006H,CX=0,73,2.CMPS 字符串比较指令(Compare String)格式:a.CMPS 目的串,源串 b.CMPSB/CMPSW执行的操作:(1)(DS:SI)-(ES:DI)不保存结果,只影响标志位(主要看ZF)(2)SI 1SI,DI 1DI 或SI 2SI,DI 2DI,74,常用来比较两个数据区是否全部相等,此时与REPZ(REPE)联用。格式:REPZ(REPE)CMPSB/CMPSW重复条件:CX0且ZF=1,即上次比较相等且串未比较完操作:CX=0或ZF=0,则退出串处理 CX-1CX 执行CMPSB/CMPSW一次,跳回,75,主要用来实现在两个数据区中寻找第一个不相等的元素(与REPZ/REPE联用)或第一个相等的元素(与REPNZ/REPNE联用)。【例】比较两个字符串,一个是设定的口令串PASSWORD,另一个是从键盘输入的字符串IN_WORD,若两者相同,程序正常执行,否则发出警告声音。DATA SEGMENT;数据段PASSWORD DB 8086 CPU;口令串IN_WORD DB 8088 CPU;输入串COUNT EQU 8;串长度DATA ENDS,76,CODE SEGMENT;代码段 ASSUME CS:CODE,DS:DATA,ES:DATA;段分配START:;初始化段寄存器 LEA SI,PASSWORD;SI指向源串 LEA DI,IN_WORD;DI指向目的串 MOV CX,COUNT;CX存放串长度 CLD;增量修改地址指针 REPZ CMPSB;重复串比较 JNE SOUND;ZF=0(不等),转SOUND处OK:;ZF=1,口令通过 SOUND:;口令未通过,发声警告CODE ENDS END START,77,【例】将存在0700H070FH单元中的非压缩BCD数与存在0800H080FH单元中的非压缩BCD数进行比较,已知有一对数相等,找出该数,并存入AL中,将该数在源串中所处存储单元的偏移地址存入DX中。MOV SI,0700H MOV DI,0800H MOV CX,10H CLD REPNE CMPSB;CX0且ZF=0(两数不等)时,重复。DEC SI;找到后,指针减1 MOV DX,SI MOV AL,SI,78,3.SCAS 字符串扫描指令(串搜索)(Scan String)格式:a.SCAS 目的串 b.SCASB/SCASW执行的操作:(1)AL(或AX)-(ES:DI)不保存结果,只影响标志位(主要看ZF)(2)DI 1DI 或 DI 2DI,79,常用来搜索某数据区中是否含有关键字(关键字送入AL或AX中),此时与前缀REPNZ/REPNE联用格式:REPNZ(REPNE)SCASB/SCASW重复条件:CX0且ZF=0(上次比较不等且串未比较完)操作:CX=0或ZF=1(找到)则退出串处理 CX-1CX 执行一次SCASB/SCASW,跳回如与REPZ(REPE)则用来搜索数据区中第一个不等于关键字的单元。,80,【例】在某一字符串中搜索是否有字符A,若有,则把搜索次数记下来,送到BX中;若没有,则将BX清0。MOV DI,OFFSET STRING;DI指向目的串 MOV CX,COUNT;CX存放串长度 MOV AL,A;AL放关键字 CLD;增量修改地址指针 REPNE SCASB;重复串搜索 JZ FIND;ZF=1(搜到),转FIND处 MOV DI,0;ZF=0,未搜到FIND:MOV BX,DI;搜到,81,【例】从地址为1000H单元开始,存放长度为256个字节的字符串,找出字符串中第一个(ASCI码为24H),并将其存放地址偏移量存入DX中。(如串中无,则存入0作为标记)MOV DX,0;以0作为标记 MOV DI,1000H MOV AL,24H MOV CX,256 CLD PEPNZ SCASB JNZ EXIT;串中无,跳EXIT DEC DJ MOV DX,DJEXIT:HLT;停机指令,82,4.LODS 数据串装入指令(从串取)(Load String)格式:a.LODS 源串 b.LODSB/LODSW执行的操作:(1)(DS:SI)AL(或AX)(2)SI 1SI 或 SI 2SI 类似于MOV AX(AL),SI 区别在于自动修改地址指针SI一般不与REP联用。如与REP联用,AL或AX将不断被刷新,只能保留最后写入的数据。,83,5.STOS 数据串存储指令(存入串)(Store String)格式:a.STOS 目的串 b.STOSB/STOSW执行的操作:(1)AL(或AX)(ES:DI)(2)DI 1DI 或 DI 2DI 常与REP联用,用AL或AX中的常数来初始化一片内存。,84,【例】将附加段中偏移地址为0400H开始的256个字节单元清0。MOV DI,0400H 或 MOV DI,0400H MOV AL,0 MOV AX,0 MOV CX,256 MOV CX,128 CLD CLD REP STOSB REP STOSW,85,注意:一般在循环程序中,LODS常与STOS联用,先由LODS将数据取入AL(AX)中处理后,再用STOS存入另一数据区中。【例】在存储器数据段中有一数据块,起始地址为BLOCK,数据块中的数为8位带符号数,要求把正、负数分开,分别送至附加段的两个缓冲区,存放正数的起始地址为PLUS_DATA,存放负数的起始地址为 MINUS_DATA。,86,MOV SI,OFFSET BLOCK;SI指向源串 MOV DI,OFFSET PLUS_DATA;

    注意事项

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

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开