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

    微机系统与接口教学资料 第三章2.ppt

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

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

    微机系统与接口教学资料 第三章2.ppt

    3.4 8088(8086)的指令系统,一、IBM PC(8086/8088)指令系统,二、数据传送指令,三、算术运算指令,四、逻辑运算指令,五、串操作指令,六、控制转移指令,七、处理机控制指令,一、IBM PC(8086/8088)指令系统,8086/8088 指令系统可分为六组:数据传送指令(Data transfar);算术指令(Arithmetic);逻辑指令(Logic);串处理指令(String manipulation);控制转移指令(Control transfar);处理机控制指令(Processor control);,二、数据传送指令,通用数据传送指令,地址传送指令,累加器专用指令,标志寄存器传送指令,1.通用数据传送指令(1)基本传送指令 MOV DST,SRC 源操作数寄存器、存储器、立即数 目的操作数 寄存器、存储器 执行的操作:DST SRC MOV指令最简单、最常用,用来赋初值,或传送数据,或对数据进行暂存等。,其中源操作数(src)和目的操作数(dst)均可采用多种寻址方式,其传送关系如图所示:,由图可知MOV指令有6种格式:(1)CPU通用寄存器之间传送(r/r)MOV CL,AL;将AL中的8位数据传到CL(2)通用寄存器和段寄存器之间(r/SEG)MOV DS,AX;将AX中的16位数据传到DS(3)用寄存器和存储单元之间(r/M)MOV AL,BX;将BX所指存储单元内容传到AL,(4)段寄存器和存储单元之间(seg/M)MOV DS,2000H;将2000H和2001H两存储单元内容传到DS(5)立即数到通用寄存器(r/Imm)MOV SP,2000H;将2000H送SP(6)立即数到存储单元(M/Imm)MOV WORD PTR SI,4501H;将立即数4501H送(SI)所指 的字单元,注意:MOV指令可以传8位或16位数据例:MOV ES,AL;错 MOV CL,4321H;错 MOV指令的操作数中必用一个寄存器,不允许两存储单元之间传送数据MOV 2000H,3000H;错例:MOV AL,SI MOV DI,AL 不能用CS,IP作目的操作数 不允许在段寄存器之间直接传送数据例:MOV DS,ES;错,不允许用立即数作目的操作数 MOV 2000H,AL;错 不能向段寄存器送立即数 MOV DS,3000H;错例:MOV AX,3000H MOV DS,AX*MOV 指令不影响标志位。,例1:把地址为AREA1(段内偏移量)的存储单元的内容,传送至同一 段内的地址为AREA2的存储单元中。,Mov AL,AREA1Mov AREA2,AL,例2:若要传送的不是一个字节,而是一个数据块,(例如内有100个字节),如何实现?,mov si,offset area1 mov di,offset area2 mov cx,100Again:mov al,si;mov di,al inc si inc di dec cx jnz again int 3,(2)栈操作指令 PUSH OPRD POP OPRD 堆栈按照先进后出的原则组织的一段内存区域。8088中规定堆栈设 置在堆栈段(SS段)内,堆栈指针SP的初值决定了堆栈的大小。SP始终指向堆栈的顶部,即始终指向最后推入堆栈的信息所在 的单元。操作数:16位通用寄存器;段寄存器;16位内存操作数(除立即数之外的 任何寻址方式)。,方式:(1)CPU通用寄存器入/出栈,如:PUSH AX POP BX(2)段寄存器入/出栈,如 PUSH CS POP DS(3)存储单元入/出栈 PUSHBX+DI POP2000H,PUSH AX指令分两步执行:1.SP-2SP2.将AH内容送至SP+1所指单元;3.再将AL内容送至SP所指单元;例:MOV AX,1234H PUSH AX,POP AX指令分两步执行:1.先将SP所指单元内容送至AL,然后再SP+1所指单元内容送至AH,然后SP+2 SP 例:MOV AX,5678H POP AX,入栈和出栈指令性用于程序保存和恢复数据,或用于转子或中断时保护现场和恢复现场。其主要注意:(1)堆栈操作指令中,有一个操作数是隐含了的,这个操作数就是(SP)指示的栈顶存储单元;(2)8086堆栈都是字操作(3)每执行一条指令,(SP)自动增减2(4)CS寄存器可以入栈,但不能随意弹出一个数据到CS(5)在使用堆栈指令时,要按“先进后出”原则来编写程序,(3)交换指令 XCHG OPRD1,OPRD2 在寄存器间或寄存器与存储器间交换信息(不允许使用段寄存器)。源操作数:寄存器、存储器 目的操作数:寄存器、存储器 执行的操作:(OPRD1)(OPRD2)例:XCHG BX,BP+SI(BX)=6F30H(BP)=0200H(SI)=0046H(SS)=2F00H(2F246H)=1234H,例如:XCHG AL,BL;(AL)与(BL)间进行字节交换 XCHG 2200H,DX;(DX)与(2200H)、(2201H)两 单元间的字交换使用时注意:(1)OPR1和OPR2不能同时为存储器操作数;(2)任一个操作数都不能使用段寄存器,也不能使用立即数。,用来对寻址机构进行控制的指令。指令传送到16位目标寄存器中的是存储器操作数的地址,而不是它的内容。1.地址传送指令 LEA,LDS,LES 把地址传送到指定寄存器。(1)LEA 有效地址送寄存器。LEA REG,SRC(REG)(SRC)目的操作数 源操作数(16位通用寄存器)(内存操作数)该地址常用来设置一个16位的寄存器作为地址指针;该指令的执行效果与 mov reg,offset src 相同。,(三)地址目标传送指令,例:LEA BX,BP+SI;执行后,BX中为(BP)+(SI)的值 LEA SP,0520H;执行后,使堆栈指针(SP)=0520H,例:lea bx,bxsi 执行前(bx)=1000h(si)=2000h 执行后 bx=1000h+2000h=3000h,(2)LDS 把源操作数指定的内存的4个相继字节的内容送至指定寄存器及DS中 LDS REG,SRC(REG)(SRC)(DS)(SRC+2)目的操作数 源操作数(16位通用寄存器)(内存操作数)(1)该指令完成一个32位地址指针的传送;(2)该指令通常指定 SI 作寄存器 REG。,DS=1000h,10100h,00020020,0200h,2000h,SI,DS,例:lds SI,100h,(3)LES 把源操作数指定的内存的4个相继字节的内容送至指定寄存器及ES中。LES REG,SRC(REG)(SRC)(ES)(SRC+2)目的操作数 源操作数(16位通用寄存器)(内存操作数)(1)该指令完成一个32位地址指针的传送;(2)该指令通常指定 DI 作寄存器 REG。,ES=1000h,10100h,00020020,0200h,2000h,DI,ES,例:les di,100h,3.累加器专用指令 IN,OUT,XLAT 输入输出指令 PC机中,所有I/O端口与CPU之间的通信都有IN,OUT指令完成。长格式(直接方式):IN AL,PORT OUT PORT,AL PORT端口地址 短格式(间接方式):IN AX,DX;从(DX)和(DX)+1所 指的两个端口输一个字到AX,低地址端 口的值输 入到AL,高地址端口的值输 到AH,1 输入/输出(I/O)指令输入指令长格式:INAL,PORT;将PORT端口字节数据输入到AL短格式:IN AX,DX;从(DX)和(DX)+1所指的两个端 口输一个字到AX低地址端口的值输 到AL,高地址端口的值输 到AH,输出指令:长格式:OUT PORT,AL;将AL中的1个字节数据输出 到PORT端口短格式:OUT DX,AX;将AL中低位字节输出到(DX)所指端口,同时将AH中的高位 字节输出到(DX)+1所指的端口例33:欲将12位A/D变换器所得数字量输入。这时,A/D变换器应使用一个字端口,设为20H。MOV DX,02F0H IN AX,DX,注意:(1)指令只能用累加器AX/AL作I/O过程机构,不能用其它寄存器;(2)长格式的I/O指令端口范围为0FFH。(3)运行有I/O指令的程序时,若无硬件端口的支持,机器将出现死锁(4)在使用短格式I/O指令时,端口地址只能赋给DX。,(2)换码指令 XLAT 功能:将AL指向的换码表中的一个字节的内容送到AL中。操作数:隐含的寄存器 BX,AL 操作:(AL)(BX)+(AL),应先将表格的首地址送入BX寄存器,将待查的值(码)放入AL中,用它来表示表中某一项与表首址的距离。例34:数字0-9对应的格雷码为:18H、34H、05H(见图)。依次放在内存以TABLE开始的区域,当#10端口输入一位十进制数时,要求将其转换为相应的格雷码再输出给该端口。MOV BX,TABLE;BX指向TABLE的首址 IN AL,10;从端口0AH输入待查值 XLAT TABLE;查表转换 OUT 10,AL;查表结果输出到0AH端口,若10端口输入值为7,则查表转换后输出值为11H,如图所示:,4.标志寄存器传送指令(1)读取标志指令 LAHF 功能:把 Flag 的低字节内容装入寄存器 AH 中。操作数:隐含的操作数 标志寄存器Flag,AH 执行的操作:AH Flag 的低位字节。,(2)设置标志指令 SAHF 功能:把 Ah 的内容装入 Flag 的低字节。操作数:隐含的操作数标志寄存器 Flag,AH 执行的操作:Flag 的低位字节 AH,注:该指令影响标志位 Z、A、P、C、S,(3)标志寄存器入栈指令 PUSHF 功能:将标志寄存器 Flag 的内容压入堆栈保存。(4)标志寄存器出栈指令 POPF 功能:把栈中内容弹出至标志寄存器 Flag。PUSHF指令将标志寄存器内容推入堆栈顶部,同时修改堆栈指针:(SP)(SP)-2。该指令执行后,标志寄存器内容不变。POPF指令功能正好相反。注:该指令影响标志位 O、S、Z、A、P、C。,三、算术运算指令,加法指令,减法指令,乘法指令,除法指令,十进制调整指令,1.加法指令 ADD DST,SRC 源操作数:通用寄存器、存储器、立即数 目的操作数:通用寄存器、存储器 执行的操作:DST DST+SRC 注:该指令影响标志位 注意:该指令适合有符号数和无符号数的运算。,DST+SRC,O S Z A P C,0 0 1 0 0 1 0 0 0,1.加法指令 ADD DST,SRC 源操作数:通用寄存器、存储器、立即数 目的操作数:通用寄存器、存储器 执行的操作:DST DST+SRC 注:该指令影响标志位 注意:该指令适合有符号数和无符号数的运算。,DST+SRC,O S Z A P C,0 0 1 0 0 1 0 0 0,例1:MOV DX,4652H ADD DX,0f0f0h,执行后:(DX)=3742H z=0 s=0 c=1 o=0 对无符号数 溢出 结果错 对有符号数 不溢出 结果正确 问:对带符号数和无符号数怎样判断是否溢出?,有符号数的溢出用溢出标志 o 判断;无符号数的溢出用进位标志 c 判断。,ADC DST,SRC 源操作数:通用寄存器、存储器、立即数 目的操作数:通用寄存器、存储器 执行的操作:DST DST+SRC+C 功能:主要用于多字节运算 注:该指令影响标志位 注意:该指令适合有符号数和无符号数的运算。,DST+SRC+C,O S Z A P C,0 0 1 0 0 1 0 0 0,例2:在内存的First和Secontd开始的区域中分存放着2F365H和 5E024 H两个数,要求求其和,并存入Third中。2 F 3 6 5+5 E 0 2 4 8 D 3 8 9,MOV AX,FirstADD AX,SecondMOV Third,AXMOV AX,First+2ADC AX,Second+2MOV Third+2,AX,2 F 3 6 5 F 3 6 5+5 E 0 2 4+E 0 2 4 8 D 3 8 9 D 3 8 9 1 0 0 0 2+0 0 0 5 0 0 0 8,2,1,FirstSecondThird,65F302 0024E0050089D30800,INC OPRD 操作数:通用寄存器、存储器(不能是段寄存器或立即数)执行的操作:OPRD OPRD+1 功能:用于在循环中修改地址指针及循环次数等。注:该指令影响标志位 例:INC CX;将CX的内容加1后 再送回CX中 注意:(1)该指令将操作数视为无符号数;(2)INC指令只影响OF、SF、ZF和PF,而不影响进位标志 CF,因此不能用INC指令进行循环计数来控制循环的结束。,OPRD+1,O S Z A P,0 0 1 0 0 1 0 0 0,2.减法指令 SUB DST,SRC 源操作数:通用寄存器、存储器、立即数 目的操作数:通用寄存器、存储器 执行的操作:DST DST-SRC 注:该指令影响标志位 例如:SUB AX,BX;AX内容减去BX中的内容,结果放在AX中 注意:该指令适合有符号数和无符号数的运算。,DST-SRC,O S Z A P C,0 0 1 0 0 1 0 0 0,SBB DST,SRC 源操作数:通用寄存器、存储器、立即数 目的操作数:通用寄存器、存储器 执行的操作:DST DST-SRC C 注:该指令影响标志位 注意:该指令适合有符号数和无符号数的运算。同加法指令 有符号数的溢出用溢出标志 o 判断;无符号数的溢出用进位标志 c 判断。,DST SRC-C,O S Z A P C,0 0 1 0 0 1 0 0 0,例:SUB DH,BP+4(DH)=41H(SS)=0000H(BP)=00E4H(00E8H)=5AH,结果:(DH)=0E7H S=1 Z=0 C=1 O=0 如果为有符号数则结果正确(无溢出)如果为无符号数则结果错误(有溢出),例3:双精度数运算 W=X+Y+24-Z,XYZW,65F302 0024E0050089D30800,MOV AX,X MOV DX,X+2ADD AX,YADC DX,Y+2;X+YADD AX,24ADC DX,0;X+Y+24 SUB AX,Z SBB DX,Z+2;X+Y+24-ZMOV W,AXMOV W+2,DX;送入w,DEC OPRD 操作数:通用寄存器、存储器(不能是段寄存器或立即数)执行的操作:OPRD OPRD-1 功能:用于在循环中修改地址指针及循环次数等。注:该指令影响标志位 例:DEC BX;将BX的内容减1后 再送回BX中 DEC SI 注意:(1)该指令将操作数视为无符号数;(2)该指令不影响 进位标志 C,OPRD-1,O S Z A P,0 0 1 0 0 1 0 0 0,NEG OPRD 操作数:通用寄存器、存储器 执行的操作:求补指令,将操作数按位(连同符号位)取反后 加1,再送回操作数。注:该指令影响标志位,OPRD,O S Z A P C,0 0 1 0 0 1 0 0 0,NEG将src中的内容变反加1。例如:若(AL)=03H,执行NEG AL后,(AL)=0FDH。0FDH的原码为10000011,即为-3.,CMP DST,SRC 源操作数:通用寄存器、存储器、立即数 目的操作数:通用寄存器、存储器 执行的操作:DST-SRC 注:该指令影响标志位 注意:(1)该指令同 SUB,但其不保存运算结果;(2)该指令后面通常跟一条转移指令,根据标志位 产生不同的程序分支。,DST-SRC,O S Z A P C,0 0 1 0 0 1 0 0 0,比较指令主要用于两个数之间的关系:大、小、相等。如:A,B1.比较相等。只要看Z 标志。Z=1相等 Z=0不相等。2.比较大小。分两种情况。无符号数 看进(借)位C 标志。C=1,有借位,则 AB A=A0H 1 0 1 0 0 0 0 0 A=53H 0 1 0 1 0 0 1 1 B=53H 0 1 0 1 0 0 1 1 B=A0H 1 0 1 0 0 0 0 0 0 1 0 0 1 1 0 1 0 0 1 1 0 0 1 1 AB AB,1,带符号数*同号:A=24H 0 0 1 0 0 1 0 0 B=44H 0 1 0 0 0 1 0 0 1 1 1 0 0 0 0 0 不会溢出O=0,用符号位 S 判断 O=0 S=0 AB S=1 AB S=0 AB S=1 AB,结论:O S=0 AB O S=1 AB(详细述述见P106),8088中有几条用于判断有符号数大小的转移指令,如:JG/JNLE 大于则转移 条件为:O S=0 且 Z=0 JL/JNGE 小于则转移 条件为:O S=1 同样有几条用于判断无符号数大小的转移指令,如:JA/JNBE 高于则转移 条件为:C=0 且 Z=0 JBE/JNA 低于或等于则转移 条件为:C=1 或 Z=1,例4:比较两个无符号数的大小,并将大数存入AL中。,XY,65F302 0024E0050089D30800,MOV AL,X MOV BL,Y CMP AL,BL;AL-BL JNC NEXT;当CF=0,转移 XCHG AL,BLNEXT:HLT,例5:比较两个带符号数的大小,并将大数存入AL中。,XY,65F302 0024E0050089D30800,MOV AL,X MOV BL,Y CMP AL,BL JG NEXT;大于则转移 XCHG AL,BLNEXT:HLT,例6:若自Block开始的内存中有100个带符号数,找出最大值存入Max单元。,Block,65F302 0024E00500,MOV BX,Offset Block MOV AX,BX INC BX INC BX MOV CX,100 Again:CMP AX,BX JG NEXT MOV AX,BX Next:INC BX INC BX DEC CX JNZ Again MOV MAX,AX HLT,Max,例7:在分别由Data1和Data2开始的两个 内存区域中,分别存放着5个1字节 的无符号数,如果Data1中的第N个 数大于Data2中的第N个数,则进行 Data1N Data2N 运算,否则 进行 Data1N+Data2N 运算,运算结果存回Data1中,Data1Data2,65F302 0024E0050089D3,LEA SI,Data1 LEA DI,Data2 MOV CX,100 Again:MOV AL,SI CMP AL,DI JC Adddat SUB AL,DI JMP Next Adddat:ADD AL,DI Next:MOV SI,AL INC SI INC DI DEC CX JNZ Again HLT,Data1Data2,65F302 0024E0050089D3,3.乘法指令 MUL SRC 无符号数乘法 源操作数:通用寄存器、存储器(不能是立即数)目的操作数:DX,AX(隐含)执行的操作:字节操作(AH,AL)(AL)(SRC)字操作(DX,AX)(AX)(SRC)注:该指令影响标志位,AL SRC,O C,0 0 1 0 0 1 0 0 0,注意:若结果的高半部分(字节 相乘为AH,字相乘为DX)为0 则 C=0,O=0 为1 则 C=1,O=1,例如:MUL BL;AL中和BL中的8位数相乘,乘积 在AX中 MUL WORD PTR SI;AX中和(SI)所指 的字单元中的16位数相乘,乘积在 DX和AX中,IMUL SRC 带符号数乘法 源操作数:通用寄存器、存储器(不能是立即数)目的操作数:DX,AX(隐含)执行的操作:字节操作(AH,AL)(AL)(SRC)字操作(DX,AX)(AX)(SRC)注:该指令影响标志位,AL SRC,O C,0 0 1 0 0 1 0 0 0,注意:若结果的高半部分不是低半部分的符号扩展的话,则 C=1,O=1 否则 C=0,O=0,符号扩展:从8位扩展到16位 20H+20H 0010,0000 0000,0000,0010,0000-20H 1111,1110 1111,1111,1111,1110,符号位,例:IMUL CX;AX中和CX中的16位带符号数 相乘,乘积在DX和AX中 IMUL BYTE PTR BX;AL中和(BX)所指的存储单元中的8位带符号数相乘,结果在AX中,4.除法指令 8086执行除法运算时,规定被除数必为除数的双倍字长;除法有两个操作数,其中被除数固定在AX中或DX中。DIV SRC 无符号数除法 IDIV SRC 带符号数除法 源操作数:通用寄存器、存储器(不能是立即数)目的操作数:DX,AX(隐含)执行的操作:字节操作(AL)(AX)/(SRC)商(AH)(AX)/(SRC)余数 字操作(AX)(DX,AX)/(SRC)商(DX)(DX,AX)/(SRC)余数 注:该指令对各标志位均无定义。,注意:SRC的类型决定是字或字节相除。,使用除法指令,注意:(1)除法运算后,标志位AF、ZF、PF、SF、PF和CF都是不确定的(2)用IDIV指令时,如果超出带符号数的表示范围,则产生错误(3)8086指令规定:余数的符号和被除数相同;(4)如果被除数没有除数的双倍字长,则要进行符号位的扩展。,例如:IDIV CX;将(DX)和(AX)中32位数除以(CX)中的16位数,商在AX中,余数在DX中,例如:DIV BYTE PTR DI;将(AX)中的 16位数除以(DI)所指的8位数,商在AL 中,余数在AH中,符号扩展指令:用于带符号数的扩展 将字节扩展成字的指令:CBW 扩展AL寄存器中数据的符号,并将其存入AH 寄存器中。若 AL=80H 则 扩展后 AH=FFH将字扩展成双字的指令:CWD 扩展AX寄存器中数据的符号,并将其存入DX寄存器中。若 AX=8000H 则 扩展后 DX=FFFFH 注:该指令不影响标志位。,例3-13:编写45ABH2132H的程序段。设被除数、除数分别按低字节在前,高字节在后存放在数据段中,其起始地址为BUFFER,并在其后保留4个字节以存放商和余数。,MOV BX,OFFSET BUFFERMOV AX,BXCWD;对被除数进行符号扩展IDIV 2 BXMOV 4 BX,AX;商放在AX中MOV 6 BX,DX;余数放在DX中,若相除的两数为无符号数,则被除数扩展应使用指令:MOV DX,0。,BUFFER,AB453221,例9:计算 w=(v-(xy+z-540)/x x、y、z、v 均为16位带符号数,分别存放在 X、Y、Z、V 单元 中,求结果并送入W单元中。,XYZVW,65F302 0024E00500,MOV AX,XIMUL Y;结果在(DX,AX)中MOV CX,AXMOV BX,DXMOV AX,Z CWD;CWD 将AX中的字扩展成双字,结果(DX,AX)中ADD CX,AXADC BX,DXSUB CX,540SBB BX,0MOV AX,VCWD SUB AX,CXSBB DX,BXIDIV XMOV W,AXMOV W+2,DX,w=(v-(xy+z-540)/x,5.十进制调整指令 前面提到的所有运算指令都是二进制数的运算指令,怎样得到十进制的运算结果呢?8088提供了一套十进制调整指令。十进制数的表示:BCD码 用二进制编码的十进制数。压缩 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 0 1 2 3 4 5 6 7 8 9 非压缩 UUUU0000 UUUU0001 UUUU0010 UUUU1001 0 1 2 9,调整指令 加法:DAA 压缩的BCD码加法十进制调整指令。AAA 非压缩的BCD码加法十进制调整指令。减法:DAS 压缩的BCD码减法十进制调整指令。AAS 非压缩的BCD码减法十进制调整指令。乘法:AAM 非压缩的BCD码乘法十进制调整指令。除法:AAD 非压缩的BCD码除法十进制调整指令。,(1)组合十进制加法调整指令DAA,DAA指令用于对组合BCD码相加的结果进行调整,使结果仍为组合的BCD码。DAA指令应紧跟在加法指令之后,执行时,先对相加结果进行测试,若结果的低4位(或高4位)二进制大于9(非法码)或大于15(即产生进位CF或辅助进位AF)时,DAA自动对低4位(或高4位)结果进行加6的调整。调整在AL中进行,结果放在AL中。例如:两个十进制数89+75的正确结果应为164,可是,相加运算后的结果为FEH,要进行以下调整:,89,=,1000 1001,75,=,0111 0101,+,1111 1110,0110 0110,=,FEH,+,=,164,0110 0100,1,例:MOV AX,06 MOV BX,07 ADD AX,BX;AX=0DH DAA;执行后 AX=13H,(2)非组合十进制数加法调整指令AAA,AAA指令用于对非组合BCD码相加结果进行调整,指令的操作如下:若(AL)&0FH9,或AF=1则(AL)(AL)+6(AF)1(CF)(AF)(AH)(AH)+1(AX)(AL)&0FH例如:两个非组合的十进制数06+07,结果应为非组合的十进制数0103,其操作过程如下:,0000 0110,0000 0111,0000 1101,0001 0011,0000 0000,0000 0001,0000 1111,0000 0011,0110,1,1,&,0000 0001,=,=,=,=,AX,0103,+,AL,AF,AH=,+,+,06,07,0DH,;非组合BCD,;不是非组合BCD,;调整,;组合BCD,;再调整AF1,;AHAH+1,;AL&0FH,;结果送AX中,程序为:MOV AX,06MOV BX,07ADD AX,BX;AX=0DHAAA;执行后 AX=0103H,(3)组合十进制数减法调整指令DAS,DAS指令对组合BCD码相减结果进行调整,紧跟在减法指令之后,调整后的结果仍为组合BCD码,DAS对结果是进行-6调整。例:SUB AL,BH DAS 执行指令前,AL=86H,BH=07H执行SUB指令后,AL=7FH,CF=0,AF=1执行DAS指令后,因AF=1,需进行调整。AL=AL-6=7FH-6=79H。CF=0,AF=1。结果调整为79的压缩BCD码。,(4)非组合十进制数减法调整指令AASAAS与AAA类似,但有两点不同:(1)AAA指令中的(AL)(AL)+6操作对应 AAS中则应改为(AL)(AL)-6;(2)AAA指令中的(AH)(AH)+1操作对 应AAS中则应改为(AH)(AH)-1;,(5)非组合十进制数乘法调整指令AAM调整后的结果仍为一个正确的非组合BCD码,放回AX中。例如:实现0809=0702的程序为:MOV AL,08 MOV BL,09 MUL BL;(AL)(BL)(AX)AAM;结果(AX)=0702,(6)非组合十进制除法调整指令AAD除法调整指令AAD应放在除法指令之前,先将AX中的非组合BCD码的被除数调整为二进制数,再进行相除。例如:要实现010306=02余01,程序如下:MOV AX,0103;取被除数 MOV BL,06;取除数 AAD DIV BL;相除,得(AL)=02,(AH)=1,四、逻辑运算指令,逻辑运算指令,移位指令,循环移位指令,1.逻辑运算指令 AND DST,SRC 逻辑与 源操作数:通用寄存器、存储器、立即数 目的操作数:通用寄存器、存储器 执行的操作:DST DST and SRC 功能:实现两个操作数的按位与运算。注:该指令影响标志位 使 O=0,C=0,P,S,Z反映操作的结果。,DST SRC,O S Z P C,0 0 1 0 0 1 0 0 0,例1:屏蔽AL寄存器的低四位。MOV AL,FF 1 1 1 1 1 1 1 1 AND AL,F0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 例2:屏蔽AL寄存器的高两位。MOV AL,FF 1 1 1 1 1 1 1 1 AND AL,3F 0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1,使一立 即 数的该位为 0 即可,使一立 即 数的该位为 0 即可,AND通常用于使某些位置0,其它位不变的情况。,OR DST,SRC 逻辑或 源操作数:通用寄存器、存储器、立即数 目的操作数:通用寄存器、存储器 执行的操作:DST DST or SRC 功能:实现两个操作数的按位或运算。注:该指令影响标志位 使 O=0,C=0,P,S,Z反映操作的结果。,DST SRC,O S Z P C,0 0 1 0 0 1 0 0 0,例3:使某数的第4、5位置1。MOV AL,03H 0 0 0 0 0 0 1 1 OR AL,30H 0 0 1 1 0 0 0 0 0 0 1 1 0 0 1 1,使一立 即 数的该位为 1 即可,OR指令通常用于将某些位置1,XOR DST,SRC 异或 源操作数:通用寄存器、存储器、立即数 目的操作数:通用寄存器、存储器 执行的操作:DST DST xor SRC 功能:实现两个操作数的按位异或运算。注:该指令影响标志位 使 O=0,C=0,P,S,Z反映操作的结果。,DST SRC,O S Z P C,0 0 1 0 0 1 0 0 0,例6:使某数的D1、D0位取反,其它位不变。MOV AL,11H 0 0 0 1 0 0 0 1 XOR AL,03H 0 0 0 0 0 0 1 1 0 0 0 1 0 0 1 0 例7:测试AX中的数与42H是否相同,相同则转移。XOR AX,0042H JZ Next Next:MOV BX,30H例8:给某寄存器清0。XOR AX,AX AX=0,结果,给寄存器 清 0,测试两操作数是否相等,使一操作数 若干位维持不变,若干位取反,使一立 即 数的相应位为 1 即可,TEST DST,SRC 测试 源操作数:通用寄存器、存储器、立即数 目的操作数:通用寄存器、存储器 执行的操作:DST and SRC 功能:实现两个操作数的按位与 运算,结果不保存,只影 响标志位。注:该指令影响标志位 使 O=0,C=0,P,S,Z反映操作的结果。,DST SRC,O S Z P C,0 0 1 0 0 1 0 0 0,例4:检测AL中的最低位是否位1,若为1则转移。MOV AL,41H 0 1 0 0 0 0 0 1 TEST AL,01H 0 0 0 0 0 0 0 1 JNZ Next 0 0 0 0 0 0 0 1 Next:MOV BL,0,TEST 通常用于检测一些条件是否满足,但又不希望改变原来操作数的情况,该指令后通常带有条件转移指令。,例5:检测CX内容是否为 0,为 0 则转移。TEST CX,0FFFFH JZ Next Next:MOV AX,1 CMP CX,0 JZ Next Next:MOV AX,1,NOT OPRD 逻辑非 操作数:通用寄存器、存储器 执行的操作:OPRD not OPRD 功能:实现操作数的按位取反运算。注:该指令不影响标志位。例如:NOT AL NOT BX,2.移位指令 SAL OPRD,CNT 算术左移 SHL OPRD,CNT 逻辑左移 操作数:通用寄存器、存储器 CNT:移位次数,当CNT1时,应将其赋给CL寄存器 执行的操作:注:该指令影响标志位 C,S,Z,P 视结果而定;移位后当最高有效位发生变化时(如 1变 0)O=1,否则 O=0。,OPRD,O S Z P C,0 0 1 0 0 1 0 0 0,C,OPRD,0,例1:某数10 MOV AL,X MOV BL,10 MUL BL MOV AL,X SHL AL,1;X*2 MOV BL,AL;BL=X*2 SHL AL,1;X*4 SHL AL,1;X*8 ADD AL,BL;X*8+X*2=X*10,时钟数 4 4 70 78,时钟数 4 2 2 2 2 3 15,移位前 0 0 0 0 0 1 0 0=4H 移位后 0 0 0 0 1 0 0 0=8H,SHR OPRD,CNT 逻辑右移 操作数:通用寄存器、存储器 CNT:移位次数,当CNT1时,应将其赋给CL寄存器 执行的操作:注:该指令影响标志位 C,S,Z,P 视结果而定;O 只当CNT=1时有效,移位后当最高有效位发生变化时(如 1变 0)O=1,否则 O=0。,OPRD,O S Z P C,0 0 1 0 0 1 0 0 0,C,OPRD,0,SAR OPRD,CNT 算术右移 操作数:通用寄存器、存储器 CNT:移位次数,当CNT1时,应将其赋给CL寄存器 执行的操作:注:该指令影响标志位 C,S,Z,P 视结果而定;O 只当CNT=1时有效,移位后当最高有效位发生变化时(如 1变 0)O=1,否则 O=0。,OPRD,O S Z P C,0 0 1 0 0 1 0 0 0,C,OPRD,例2:将 F0H 除以2。MOV AL,F0H 1 1 1 1,0 0 0 0 F0H=(-10H)=-16D SAR AL,1 1 1 1 1,1 0 0 0 F8H=(-8H)=-8D MOV AL,F0H 1 1 1 1,0 0 0 0 F0H=240 D SHR AL,1 0 1 1 1,1 0 0 0 78H=120 D,无符号,带符号,移位指令的作用:移位指令通常用来做 乘2 或 除2 的操作:左移一位 操作数2;右移一位 操作数2 算术移位指令适用于带符号数的运算。逻辑移位指令适用于无符号数的运算。,例2-2:将 带符号数 89H 乘以2。MOV AL,89H 1 0 0 0,1 0 0 1 89H=(-77H)=-119D SHL AL,1 0 0 0 1,0 0 1 0 12H=(12H)=18D例2-3:将 带符号数 F0H 乘以2。MOV AL,F0H 1 1 1 1,0 0 0 0 F0H=(-10H)=-16D SHL AL,1 1 1 1 0,0 0 0 0 E0H=(-20H)=-32D,带符号,带符号,带符号数的运算结果的正确与否看溢出位,O=1 溢出,结果错;O=0 不溢出,结果正确。无符号数的运算结果的正确与否看进位位,C=1 有进位,结果错;C=0 无进位,结果正确。,例3:请求出AL中“1”的 个数,存在AH中。MOV AH,0 Again:SHL AL,1 ADC AH,0 CMP AL,0 JNZ AGAIN HLT MOV AH,0 MOV CL,8 Again:SHL AL,1 JNC Next INC AH Next:DEC CL JNZ Again HLT,3.循环移位指令 ROL OPRD,CNT 循环左移 操作数:通用寄存器、存储器 CNT:移位次数,当CNT1时,应将其赋给CL寄存器 执行的操作:注:该指令影响标志位 C 视结果而定;O 只当CNT=1时有效,移位后当最高有效位发生变化时(如 1变 0)O=1,否则 O=0。,OPRD,O C,0 0 1 0 0 1 0 0 0,C,OPRD,ROR OPRD,CNT 循环右移 操作数:通用寄存器、存储器 CNT:移位次数,当CNT1时,应将其赋给CL寄存器 执行的操作:注:该指令影响标志位 C 视结果而定;O 只当CNT=1时有效,移位后当最高有效位发生变化时(如 1变 0)O=1,否则 O=0。,OPRD,O C,0 0 1 0 0 1 0 0 0,C,OPRD,RCL OPRD,CNT 带进位的循环左移 操作数:通用寄存器、存储器 CNT:移位次数,当CNT1时,应将其赋给CL寄存器 执行的操作:注:该指令影响标志位 C 视结果而定;O 只当CNT=1时有效,移位后当最高有效位发生变化时(如 1变 0)O=1,否则

    注意事项

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

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开