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

    《微机原理与应用教学资料》第三章(课件).ppt

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

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

    《微机原理与应用教学资料》第三章(课件).ppt

    1,第三章 8086的寻址方式和指令系统,电气学院学习部资料库,2,3-1 8086寻址方式指令:操作码:给出此指令应完成何种操作。告诉计算机 做什么 操作数:该指令的操作对象。告诉计算机对谁做指令格式:操作码 目的操作数,源操作数 源操作数:数据从何而来。操作过程中原值不变。目的操作数:送到哪里去。操作数原值不保留。寻址方式:说明操作数所在地址的方法。操作数来源:指令 CPU内部寄存器 内存单元,电气学院学习部资料库,3,一、立即寻址方式 指令中包含操作数,不必执行总线周期,指令执行速度快例1:MOV AL,80H;80HAL,(AL)=80H例2:MOV AX,1234H;1234HAX,(AH)=12H,(AL)=34H*加上(),表示取寄存器或内存单元的内容 一般用于赋值。源操作数和目的操作数字长应相同 立即数只能做源操作数,不能做目的操作数 若是以字母打头的数,例:A0H在编程中必须表示为0A0H,电气学院学习部资料库,4,二、寄存器寻址操作数在寄存器中,不必执行总线周期,执行速度快例1:INC AL;(AL)+1AL,若(AL)=86H,指令执行完(AL)=87H例2:MOV AX,CX;(CX)AX,若指令执行前CX=3A68H,指令执行后AX=3A68H目的与源操作数都可用寄存器寻址注意数据匹配,源与目的操作数的长度必须一致 例:MOV AX,BL;错误。可用于寄存器寻址的寄存器包括:4个通用寄存器,4个专用寄存器 16位操作数:AX,BX,CX,DX,SI,DI,SP,BP 8位操作数:AH,AL,BH,BL,CH,CL,DH,DL从第三种开始,指令的操作数都在内存中,须用不同的方法求出操作数的物理地址,来获得操作数。,电气学院学习部资料库,5,三、直接寻址 指令中直接给出操作数的有效地址EA,操作数在内存中,需执行总线周期 有效地址EA:操作数的偏移地址 物理地址=段地址*16+EA默认段地址为DS,指令中有效地址EA加,以区别于立即数。*加上,表示里面的内容是内存中偏移地址 例1:MOV AL,1064H;若(DS)=1000H,则(11064H)AL 例2:MOV AX,1064H;(11064H)AL,(11065H)AH 若(11064H)=00H,(11065H)=12H,(AX)=1200H,电气学院学习部资料库,6,一个字在存储体中相邻的两个字节存放,字单元的地址以低位地址表示,存入时以低位字节在低地址,高位字节在高地址段超越前缀:若段地址为CS、SS、ES,应在指令中指定段超越前缀 例:MOV AX,ES:1064H;将ES段中1064H的内容AX ES:MOV AX,1064H 符号地址(给存储单元起一名字,变量名)例:MOV AX,AREA1;从符号地址为AREA1的存储单元中取一个字 AX 符号地址也允许段超越,电气学院学习部资料库,7,四、寄存器间接寻址 指令中通过寄存器给出有效地址EA,寄存器中为地址,操作数在内存中,需执行总线周期可以用于寄存器间接寻址的寄存器有:SI、DI,BX、BP 变址寄存器 基址寄存器 寄存器名称外面必须加(SI)EA=(DI)DS(默认)(BX)(BP):SS物理地址=段地址*16+EA,电气学院学习部资料库,8,例:MOV BX,SI;若(DS)=1000H,(SI)=2000H,(12000H)=318BH。则(BH)=31H,(BL)=8BH 也可以通过指定超越前缀,改变段基地址 例:MOV BX,DS:BP;(DS:BP)BL,(DS:BP+1)BH,电气学院学习部资料库,9,五、寄存器相对寻址 通过基址或变址寄存器的内容与指令中指定的8位或16位位移量(Displacement)给出EA,操作数在内存中,需执行总线周期(SI)8位 EA=(DI)DS+disp(BX)16位(BP):SS 物理地址=段地址*16+EA 例:MOV AX,BX+1000H;(DS:BX+1000H)AL,(DS:BX+1001H)AH MOV AX,1000HBX也可以通过指定超越前缀,改变段基地址 例:MOV AX,ES:1000HBX,电气学院学习部资料库,10,六、基址加变址寻址 由一个基址寄存器(BX或BP)和一个变址寄存器(SI或DI)之和给出EA BX SI EA=+BP DI 物理地址=段地址*16+EA 默认的段地址:只需出现BP,即为SS,其余为DS例:MOV AX,BX+SI;(DS:BX+SI)AL,(DS:BX+SI+1)AH MOV AX,BXSI MOV AX,SI+BP;(SS:SI+BP)AL,(SS:SI+BP+1)AH MOV AX,BP+SI例:MOV AX,BX+BP;错误,BX、BP均为基址寄存器,电气学院学习部资料库,11,七、相对基址加变址寻址 由一个基址寄存器和一个变址寄存器的内容,再加上一个位移量,三者之和确定EA BX SI 8位 EA=+disp BP DI 16位例:MOV AX,BX+SI+1000H;(DS:EA)AL,(DS:EA+1)AH MOV AX,1000H BXSI若 DS=2000H,BX=1500H,SI=0300H,disp=1000H,(22800H)=26BFH则 EA=1500H+0300H+1000H=2800H,物理地址=20000H+2800H=22800H,AX=26BFH,电气学院学习部资料库,12,八、其它 隐含寻址 例:DAA、AAA、AAS、DAS、AAM、AAD I/O端口寻址 例:IN AL,63H;OUT 85H,AL;MOV DX,0FF4H;OUT DX,AL;,电气学院学习部资料库,13,课堂练习:举例:指出下列指令中目的、源操作数各采用何种寻址方式 目的操作数 源操作数 MOV SI,1000H;MOV SI,AL;MOV 1000H,AL;MOV BP,BX;MOV BP,BX;MOV AX,AREA1;AND DL,BX+SI+20H;PUSH DS;ADD AX,BX+SI;SUB AX,BX+1000H;IN AL,05H;,R寻址 立即数寻址 R间接寻址 R寻址 直接寻址 R寻址 R寻址 R寻址 R寻址 R间接寻址 R寻址 直接寻址 R寻址 相对基址加变址 R寻址 R寻址 基址加变址 R寻址 R相对寻址 R寻址 I/O端口寻址,电气学院学习部资料库,14,3.2 8086指令系统,一、数据传送指令1、通用数据传送指令(1)MOV传送指令 格式:MOV 目的,源 功能:源操作数 目的操作数,可实现R R,R M,立即数 M的传送(参见图3-12)受影响的标志位:无 例:MOV AX,BX;BX AX,R R MOV AX,1064H;M R MOV 1064H,AX;R M MOV WORD PTR1000H,1000H;立即数 M,电气学院学习部资料库,15,注意:源操作数和目的操作数字长应相同立即数只能做源操作数,且不能被直接送进段寄存器IP寄存器不能用作源操作数,亦不能做目的操作数CS寄存器不能作目的操作数不能在两个内存单元,或两个段寄存器之间直接传送数据指令中至少要有一项操作数明确说明传送的是字节还是字,电气学院学习部资料库,16,DATA SEGMENT AREA1 DB 14H,3BH;变量名 助记符 AREA2 DB 3 DUP(0);重复3个0存入AREA2起始的储存单元 ARRAY DW 3100H,01A6H STRING DB GOODDATA ENDS,D,O,O,G,01H,A6H,31H,00H,00H,00H,00H,3BH,14H,ARRAY,STRING,AREA1,AREA2,DATA:0000H,DATA:0002H,DATA:0005H,DATA:0009H,段定义符,电气学院学习部资料库,17,说明:1.SEGMENTENDS 段定义语句 DATA 数据段段名2.DB、DW 数据定义语句 作用:将操作数存入变量名指定的存储单元 格式1:变量名 伪操作符(DB、DW)操作数,操作数,.格式2:变量名 伪操作符(DB、DW)n DUP(操作数,操作数,.)其中,DB 用来定义字节变量,DW用来定义字变量3.AREA1:变量名,将此变量的助记符后的第一个字节的偏移地址作为它的符号地址例:STRING1 DB OK STRING2 DW OK 例:STRING2 DW GOOD;错误,电气学院学习部资料库,18,(2)堆栈、出栈指令 PUSH、POP 格式:PUSH 源 POP 目的 功能:PUSH 将源操作数压到堆栈中,POP将堆栈中数据弹出到目的操作数 受影响的标志位:无 说明:按“字”操作,源操作数可以是16位通用寄存器,段寄存器或存储器中的数据字 PUSH:(SP)-2 SP,POP:(SP)+2 SP 操作数不能是立即数 例:PUSH 1000H;错误堆栈操作原则:先进后出 SP始终指向栈顶,且总是指向偶地址单元,其值可以从FFFEH开始 POP指令中,CS 不能做目的操作数,即 PUSH CS 正确,而POP CS 错误,电气学院学习部资料库,19,PUSH AX PUSH BX.POP BX POP AX,例:已知指令执行前(SS)=C000H,(SP)=C100H,(AX)=1100H,(BX)=3322H,;该指令执行后(SP)=C0FEH,;该指令执行后(SP)=C0FCH,电气学院学习部资料库,20,堆栈初始化操作,堆栈段起始地址,栈底及初始栈顶,电气学院学习部资料库,21,入栈操作,电气学院学习部资料库,22,出栈操作,电气学院学习部资料库,23,(3)交换指令 XCHG 格式:XCHG 目的,源 功能:目的操作数与源操作数互换 影响标志位:无 例:XCHG AL,BL XCHG BX,DX XCHG AL,BX;错误注意:CS、IP 不能做操作数 例:XCHG CS,AX;错误 XCHG IP,BX;错误 不能直接交换两个存储单元 例:XCHG 1000H,BX;错误,电气学院学习部资料库,24,(4)换码指令XLAT 格式:XLAT 转换表 或XLAT 功能:将一个字节从一种代码转换为另一种代码,结果自动送入AL中 影响标志位:无 执行以下操作:先建立一个表格(在DS段中),将转换表的起始偏移地址BX将表中某一项(所要查找的)与表首地址之间的位移量 ALXLAT指令执行时,CPU会将BX和AL中的值相加,将得到的值作为地址,然后将此地址所对应的单元中的值取到AL中即:BX+AL AL,电气学院学习部资料库,25,例:要求将3从十进制数转换成相应的字型代码,电气学院学习部资料库,26,数据段中T1用于存储字型代码表格 T1 DB 40H,79H,24H,30H,19H DB 12H,02H,78H,00H,18H;定义七段码表格 MOV BX,OFFSET T1;表格首地址BX,;(OFFSET 变量或标号)用于返回变量或标号的偏移地址值 MOV AL,3;数字3的位移量 AL XLAT T1;查表得(AL)=30H,T1也可不写,电气学院学习部资料库,27,2、输入/输出指令:IN/OUT 格式:IN 目的,源 OUT 功能:实现AX,AL与I/O Interface间的数据传递 影响标志位:无 例:IN AL,50H;50H端口内容AL IN AX,50H;50H端口内容AL,51H内容AH OUT 50H,AL;AL内容50H端口,电气学院学习部资料库,28,注意:寄存器只能是累加器AX或AL 例:IN BL,50H;错误 IN AL,50H MOV BL,AL;可实现(50H)BL如果端口地址0FFH(255),只能用DX间接寻址 即 在DX寄存器中设置好端口号 例:IN AL,01FFH;错误 MOV DX,01FFH IN AL,DX;可实现(01FFH)AL,电气学院学习部资料库,29,3、地址传送指令(1)LEA 取有效地址指令格式:LEA 目的,源功能:将存储器中源操作数地址的偏移量送到一个16位寄存器(除CS以外)影响标志位:无例:LEA AX,2728H;(AX)=2728H 比较 MOV AX,2728H;(DS:2728H)AX LEA BX,TABLE 等效 MOV BX,OFFSET TABLE注意:LEA指令和MOV指令的区别例:MOV BX,OFFSET 2728H;错误,电气学院学习部资料库,30,(2)LDS 将双字指针送到寄存器和DS指令格式:LDS 目的,源功能:从源操作数指定的存储单元中,取出4字节内容,前2字节目的(多用SI),后2个字节DS例:已知DS=1200H,(12450H)=F346H,(12452H)=0A90H LDS SI,0450H;执行后,(SI)=F346H,(DS)=0A90H(3)LES 将双字指针送到寄存器和ES指令格式:LES 目的,源功能:从源操作数指定的存储单元中,取出4字节内容,前2字节目的(多用DI),后2字节ES例:已知DS=1200H,(12450H)=F346H,(12452H)=0A90H LES DI,0450H;执行后,(DI)=F346H,(ES)=0A90H,电气学院学习部资料库,31,4、标志传送指令(1)LAHF 标志送到AH指令 格式:LAHF 功能:把PSW低8位取到AH中 影响标志位:无(2)SAHF AH送标志寄存器指令 格式:SAHF 功能:为LAHF的反操作,即将AH的内容存入PSW低8位 影响标志位:SF、ZF、AF、PF、CF,电气学院学习部资料库,32,(3)标志入栈、出栈指令 PUSHF、POPF 格式:PUSHF、POPF 功能:PUSHF:PSW内容入栈,SP-2 SP POPF:栈顶内容弹到PSW,SP+2 SP(当前堆栈指针所指的一个字)用途:成对使用,常用于子程序调用和中断服务子程序的开头和结尾,对PSW保护和恢复 用于修改TF,电气学院学习部资料库,33,二、算术运算指令(都影响标志位)1、加法指令(1)ADD ADC格式:ADD 目的操作数,源操作数 ADC功能:ADD:源+目的 目的 ADC:源+目的+CF 目的注意:目的操作数和源操作数不能同时为存储器目的操作数和源操作数类型必须一致,同为字或字节例1:ADD AX,1000H;(AX)+1000H AX ADD AL,12H ADC AL,0AH,电气学院学习部资料库,34,例2:假设一个四字节数12346678H存于起始地址0100H中,一个二字节数A567H存于0200H中,要求进行两数求和,并把结果存放于0300H起始地址的内存中 MOV SI,0100H;把四字节数首地址 SI MOV BX,0300H;存放求和结果内存单元首地址 BX MOV AX,SI;把四字节数低16位 AX ADD AX,0200H;二字节数+四字节数低16位 MOV BX,AX;(AX)BX MOV AX,SI+2;高16位 AX ADC AX,0000H;(AX)+0000H+CF AX MOV BX+2,AX,电气学院学习部资料库,35,(2)增量指令INC格式:INC 目的操作数功能:目的+1 目的例1:INC AL;(AL)+1 AL INC AX;(AX)+1 AX注意:执行后影响AF、OF、PF、SF、ZF,但不影响CF例2:INC AX;若AX=FFFFH,按正常情况,加1后,CF=1,按此规定不影响CF 由于该指令只有一个操作数,如果操作数是内存单元,则必须用伪指令进行类型说明 伪指令格式:类型 PTR(类型说明符)变量或地址表达式例3:INC BYTE PTR BX+DI+500H WORD PTR PWORD PTR(定义一个四字节的内存空间存储一个数),电气学院学习部资料库,36,2、减法指令(1)SUB,SBB格式:SUB 目的,源 SBB功能:SUB:目的-源目的 SBB:目的-源-CF 目的 例:SUB AX,2000H SUB AL,0ABH SBB AX,2030H SBB WORD PTR DI+2,1000H(2)减量指令DEC格式:DEC 目的功能:目的-1 目的,为INC 的反操作影响标志位,但不影响CF 例:DEC AX DEC BYTE PTR BX,电气学院学习部资料库,37,(3)求补指令NEG 格式:NEG 目的 功能:对目的操作数求补目的(0-目的目的)例:若(AX)=1234H,NEG AX;执行后,(AX)=EDCCH,CF=1 只有当目的操作数为0,CF=0(4)比较指令 CMP 格式:CMP 目的,源 功能:目的-源,只进行比较,不破坏两个操作数 影响标志位:ZF、CF、SF、OF、PF、AFa、目的=源,ZF=1b、若目的源 无符号数 CF=0 目的源 CF=1 目的源 SFOF=1(即SF、OF不同)目的源,电气学院学习部资料库,38,3、乘法指令(1)无符号数乘法MUL格式:MUL 源(有隐含操作数)功能:(AX)*(16位)源 DX、AX(AL)*(8位)源 AX例:MUL BL;(BL)*(AL)AX MUL CX;(CX)*(AX)高16位 DX 低16位 AX注意:若源操作数为存储器单元,源操作数前应加上PTR类型说明,电气学院学习部资料库,39,4、除法指令(1)无符号数除法DIV格式:DIV 源操作数功能:(AX)8位源操作数;商 AL,余数 AH(DX)(AX)16位源操作数;商 AX,余数 DX例:DIV BL;(AX)BL,商 AL,余数 AH DIV BX说明:除法指令只能是16位8位或者32位16位,但实际情况可能是8位8位或者是16位16位,此时需要将被除数扩展,电气学院学习部资料库,40,扩展规则:(AL)=8位,(AH)=清零,无符号数 符号位扩展到AH,有符号数 若源为16位,用DX扩展,规则同上例:已知(AL)=10010001B,无符号数扩展,(AX)=0000 0000 1001 0001B 有符号数扩展,(AX)=1111 1111 1001 0001B(2)扩展指令:(有符号数扩展)CBW 指令:把AL中的字节转换为AX字 CWD 指令:把AX中的字转换为DX AX双字,电气学院学习部资料库,41,5、BCD码运算指令(1)BCD 码:采用二进制数编十进制数,组合BCD码 4位 无符号压缩十进制数 非组合BCD码 8位 无符号非压缩十进制数例1:3D 压缩 4位 0011B 非压缩 8位 0000 0011B例2:73D 压缩十进制数 BCD73 0111 0011B 非压缩十进制数 BCD7 BCD3 0000 0111 0000 0011B 例3:,电气学院学习部资料库,42,(2)加法十进制调整指令 DAA:用于调整组合BCD(压缩十进制数)AAA:用于调整非组合BCD(非压缩十进制数)注意:DAA或AAA指令必须紧跟在ADD或ADC指令后相加后的结果只有在AL中,才能使用DAA或AAA指令调整,即指令不能用于调整16位BCD 例:MOV AX,1945H ADD AX,1271H DAA;错误,电气学院学习部资料库,43,DAA调整规则:执行ADD或ADC指令后,调整低半字节:若AL中的低四位9或半进位标志AF=1,则AL AL+6调整高半字节:上步调整后,若AL中高4位9或CF=1,则ALAL+60H,并使CF=1,否则CF=0AAA调整规则:若AL中低四位9或AF=1 AL+6 AL用与操作()将AL高4位清0AF=1,CF=1,AH+1 AH,电气学院学习部资料库,44,例:编一段程序实现组合BCD相加指令,结果送入BX 1945 1271 3216程序:,电气学院学习部资料库,45,MOV AL,45H 0100 0101 45HADD AL,71H;(AL)=0B6H AF=0 CF=0+0111 0001 71HDAA;(AL)=16H,CF=1 1011 0110 MOV BL,AL+0110 调整MOV AL,19H 1,0001 0110(BL)=16HADC AL,12H;(AL)=2CH AF=0 CF=0 DAA;(AL)=32H,CF=0MOV BH,AL;(BX)=3216H 0001 1001 19H 0001 0010 12H+1 CF 0010 1100+0110 调整 0011 0010(BH)=32H,电气学院学习部资料库,46,减法的十进制调整指令 DAS:用于调整组合BCD码 AAS:用于调整非组合BCD码乘法的十进制调整指令 AAM:用于调整非压缩十进制数除法的十进制调整指令 AAD:用于调整非压缩十进制数,在除法指令之前,把非压缩BCD数转换成二进制数8086中乘除运算不允许采用压缩BCD数,必须先化为非压缩BCD数,电气学院学习部资料库,47,三、串操作指令1、字符串传送指令 MOVSB/MOVSW格式:REP MOVSB MOVSW功能:把DS:SI指出的源串 ES:DI指出的目的串中,且自动修改指针SI、DI不影响标志位,电气学院学习部资料库,48,例:编一段程序,实现把起始地址为1000H,长度为100个字节的数据送到起始地址为2000H的存储单元中 MOV SI,1000H MOV DI,2000H MOV CX,100;CX作串长度计数器,只能用CX CLD;DF=0,地址增量(存储数据存储器地址方向增加)REP MOVSB;DS:SI ES:DI SI+1 SI,DI+1 DI CX-1 CX(当有加前缀REP时执行,重复传送串中的字节,直到CX=0为止),电气学院学习部资料库,49,2、字符串比较指令 CMPSB/CMPSW格式:REPZREPNZ CMPSB CMPSW功能:把DS:SI与ES:DI指出的字符串进行比较,且自动修改指针SI、DI影响标志位:ZF、CF、OF、SF比较指令,退出循环,有两个可能 不满足循环条件 计数器CX=0 REPZ:ZF=1&CX0 循环条件 REPNZ:ZF=0&CX0,电气学院学习部资料库,50,例:编程,从两个字符串中找出第一个不相同的字符 STRING1 DB ABCDEF STRING2 DB ABCDKF;定义两个字符串 MOV SI,OFFSET STRING1;等效 LEA SI,STRING1 MOV DI,OFFSET STRING2 MOV CX,6 CLD REPZ CMPSB;循环条件ZF=1,若ZF=0退出循环,找到第一个不相同的字符,电气学院学习部资料库,51,例:编程:比较两个字符串,第一个是你在程序中设定的口令串,第二个是从键盘输入的字符串IN_WORD,若两者相同,程序将开始执行,否则驱动PC机的扬声器发声警告,并拒绝往下执行。DATA SEGMENTPASSWORD DB 750430LIIN_WORD DB 750424LECOUNT EQU 8DATA ENDSCODE SEGMENTASSUME DS:DATA,ES:DATA MOV SI,OFFSET PASSWORD;等效 LEA SI,PASSWORD MOV DI,OFFSET IN_WORD MOV CX,COUNT CLD REPZ CMPSB;循环条件ZF=1J及 CX0。若ZF=0,退出循环 JNE SOUND;若不相等,转发声程序OK:;比完且相等,往下执行SOUND:CODE ENDS,电气学院学习部资料库,52,3、字符串检索指令 SCASBSCASW格式:REPZREPNZ SCASB SCASW功能:从ES:DI字符串中查找与AL、AX不同或相同的字符;同时自动修改DI影响标志位自学例377,电气学院学习部资料库,53,例:编程,实现某一数由格雷码转换为ASC码假设:ASC码存于表T1中,格雷码存于表T2中,AL中为需要转换的数的格雷码,电气学院学习部资料库,54,电气学院学习部资料库,55,T1 DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39HT2 DB 00H,01H,03H,02H,06H,07H,05H,04H,0CH,0DHMOV BX,offset T1MOV DI,offset T2;表T2首地址DIMOV CX,0AH;确定检索字符个数CLD;DF=0,地址增量 REPNZ SCASB;不相等,循环;相等则退出。MOV AX,DIMOV DI,offset T2SUB AX,DI;(AL)=偏移量XLAT T1,电气学院学习部资料库,56,4、取字符串指令 LODSBLODSW格式:LODSBLODSW功能:把DS:SI指出的字符串取到AL 或AX,同时修改SI不影响标志位,该指令无重复前缀例:编程实现将0700H开始5个字节内容逐一取出,经过一定处理,结果回送 MOV SI,0700H MOV CX,5 CLDLI:LODSB;DS:SI AL,(SI+1)SI DEC CX;由于取字符串指令LODSB无前缀Repeat,所以必须手动设置-1 MOV SI1,AL JNZ LI,电气学院学习部资料库,57,5存字符串指令 STOSBSTOSW 格式:REP STOSBSTOSW 功能:把AL,AX值 ES:DI,同时修改DI 例:将0100H开始的256个内存字节单元清零 MOV DI,0100H MOV CX,256 CLD MOV AL,0 REP STOSB;存数据,DI+1 DI CX-1 CX,电气学院学习部资料库,58,四、逻辑运算与移位指令,1、逻辑运算:AND、OR、XOR、NOT、TEST 格式:AND OR 目的,源 XOR NOT 目的功能:将目的与源按位逻辑操作,结果回送目的影响标志位(除NOT指令外)格式:TEST 目的,源 测试指令功能:目的与源按位与,但结果不回送目的,仅影响标志位(与CMP指令相似),一般都是和后面的控制转移指令相结合使用 TEST AL,80H;若D7=0,ZF=1;D7=1,ZF=0,电气学院学习部资料库,59,执行指令前 执行指令后1.AND AL,0FH;(AL)=3AH(AL)=0AH 用于高四位清零(屏蔽),低四位保留2.AND AX,1000H;(AX)=3234H(AX)=1000H3.OR AL,0FH;(AL)=3AH(AL)=3FH 用于高四位保留,低四位置14.OR AX,1000H;(AX)=2234H(AX)=3234H 0011 1010 0011 0010 0011 0100 0011 0101 x 0000 1111 x 0001 0000 0000 0000+0000 1111 0000 1010 0001 0000 0000 0000 0011 1111,电气学院学习部资料库,60,5.XOR AX,AX;(AX)=任意(AX)=0000H 用于某一单元清零6.XOR AL,0FH;(AL)=0AH(AL)=05H 用于某些位保留(和0相异或),某些位取反(和1相异或)7.NOT AL;(AL)=0FFH;(AL)=00H8.NOT AX;(AX)=0FFFH,(AX)=F000H9.NOT BYTE PTR BX 0000 1010XOR 0000 1111 0000 0101,电气学院学习部资料库,61,例3-69 设AL中存有报警标志,若D7=1,表示温度报警,程序转向T-ALARM;D6=1,表示压力报警,程序转向P-ALARM。,TEST AL,80H JNZ T-ALARM TEST AL,40H JNZ P-ALARM,电气学院学习部资料库,62,2、算术逻辑移位指令 格式:SHL SAL SHR目的操作数,计数值 SAR目的操作数:816位的寄存器操作数或内存操作数计数值:1或CL中内容,当移位次数1,须用CLCL在移位循环移位指令中做移位次数寄存器功能:把目的数按计数器表示的移位位数进行非循环移位,标志位CF的值总是等于最后一个移出位,电气学院学习部资料库,63,SHL逻辑左移 最高位 最低位 左移1次,相当于将目的操作数2 例1:原来(AL)=12H=0001 0010B SHL AL,1;执行后(AL)=24H=0010 0100B,(CF)=0 当计数值2,必须使用CL做移位计数器例2:当(CL)=02H(AL)=12H=0001 0010B SHL AL,CL;执行后(AL)=48H=0100 1000B,(CF)=0对内存单元操作 SHL BYTE PTR BX,1SAL 算术左移 与SHL功能相同,CF,D7 D0,0,电气学院学习部资料库,64,SHR 逻辑右移 最高位 最低位 逻辑右移1次,相当于无符号数2SAR 算术右移 最高位 最低位 算术右移1次,相当于有符号数2,电气学院学习部资料库,65,例1:用右移方法做除法,133/8=165 MOV AL,10000101B MOV CL,03H SHR AL,CL;(AL)=10H,CF=1例2:用SAR指令计算-128/8=-16 MOV AL,10000000B MOV CL,03H SAR AL,CL;(AL)=F0H=-16,CF=0例3:SAR AL,1;若原来(AL)=0ABH=1010 1011B=-55H=-85D执行后(AL)=0D5H=1101 0101B=-2BH=-43D,(CF)=1,电气学院学习部资料库,66,3、循环移位指令:ROL、ROR、RCR、RCL 格式:ROL(循环左移)ROR(循环右移)RCR(带进位循环右移)目的,计数值 RCL(带进位循环左移)功能:对目的数按计数值规定的移位位数循环移位。课本第95页图3.18,电气学院学习部资料库,67,五、控制转移指令,条件、无条件转移子程序调用、返回循环控制中断调用转移类型:段内、段间,电气学院学习部资料库,68,1、无条件、过程调用指令无条件转移指令 JMP格式:JMP 目的标号功能:无条件地将程序转移到目的标号指向的位置去执行。,电气学院学习部资料库,69,子程序调用、返回指令:CALL,RET n 格式:CALL 过程名(子程序名)格式:RET n 带参数的返回指令(返回后,让SP自动加上n)子程序是一完整的、独立的有一定名称的(过程名)的程序段,它可以多次被其它程序调用(CALL),子程序完成后返回(RET)原先调用它的程序中紧跟CALL指令后的下一句指令。CALL指令在主程序中,RET指令在子程序中末尾执行CALL指令过程:把断点压入堆栈子程序首地址装入IP(SHORT)或IP与CS中(FAR)执行RET指令过程:把断点地址弹出到IP或IP与CS中同样有段内直接调用,段内间接调用,段间直接调用,段间间接调用四种,电气学院学习部资料库,70,2、条件转移指令 格式:条件转移指令助记符 目的标号 功能:根据对标志位状态的测试决定程序走向 均为段内短转移。目的地址由当前IP值与指令中给出的8位相对位移量相加而成,它与转移指令之后的那条指令的距离为-128+127字节 a.对单个状态检测 表3-11 JS、JNS 符号标志位 JZ、JNZ 全零 JC、JNC 进位 JP、JNP 奇偶 JO、JNO 溢出,电气学院学习部资料库,71,b.对无符号数的测试跳转(CF、ZF)表3-12 JAJNBE above below JAEJNB JBJNAE JBEJNA c对有符号数的测试跳转(SF、OF、ZF)JGJNLE great less JGEJNL JLJNGE JLEJNG 说明:使用条件跳转指令前,必须对测试位进行设置(例:CMP,TEST指令)条件跳转距离在-128+127个单元(段内短转移),电气学院学习部资料库,72,例:编一个程序段以实现如下功能 AND AX,AX JS L1 JMP L2L1:NEG AX;求其绝对值L2:ADD AX,BX AND AX,AX JNS L1 NEG AXL1:ADD AX,BX TEST AX,8000H JZ L1 NEG AXL1:ADD AX,BX,CMP AX,0 JGE L1 NEG AXL1:ADD AX,BX,电气学院学习部资料库,73,3、循环控制指令 格式:LOOP LOOPZLOOPE 目的标号 LOOPNZLOOPNE JCXZ 功能:用以控制一个程序段的重复执行重复次数由CX决定循环指令执行时,每执行一次,CX自动-1,当CX0时转移,均为段内短转移,重复执行,当CX=0时结束循环 JCXZ:仅CX=0时转移 LOOPZ和 LOOPNZ指令是把CX是否为0和ZF结合起来作为转移条件,电气学院学习部资料库,74,LOOP执行动作,LOOPZLOOPE执行动作,LOOPNZLOOPNE与LOOPZLOOPE相反,电气学院学习部资料库,75,例:用循环控制指令设计一个简单程序,实现两个16位无符号压缩十进制数的相加,结果放在被加数单元。MOV SI,OFFSET FIRST MOV DI,OFFSET SECOND MOV CX,2 CLC;清CF=0L1:MOV AL,SI ADC AL,DI DAA MOV SI,AL INC SI INC DI LOOP L1,电气学院学习部资料库,76,4中断、中断返回指令 格式:软件中断:INT 中断类型码 中断返回:IRET 功能:软件中断、返回 详见中断一章,电气学院学习部资料库,77,六、处理器控制指令,1、标志位操作指令(CF、DF、IF)a.STC、CLC、CMC b.STD、CLD c.STI、CLI STC;CF=1 STD;DF=1 STI;IF=1 CLC;CF=0 CLD;DF=0 CLI;IF=0 CMC;CF取反2、暂停指令HLT:CPU处于暂停,只有下列情况之一发生时,才脱离暂停状态:RESET 信号 NMI 引脚 硬件请求中断 INTR 引脚 IF=1时,硬件请求中断,电气学院学习部资料库,78,3、NOP空操作:单字节指令,耗费3个时钟周期,不影响标志位。常用于循环操作中增加延时 4、外部同步指令 LOCK ESC 协调CPU与协处理器的工作 WAIT,电气学院学习部资料库,79,七、软件延时,例3-96 设CPU时钟频率f=5MHz,编写延时1ms的程序。延时时间=时钟周期执行次数 时钟周期执行次数 MOV CX,N;41 NEXT:NOP;3N NOP;3N LOOP NEXT;循环时为17,不循环为5f=5MHz T=0.2s延时1ms所需要的总的时钟周期数CT为:即CT=5000=4+3N+3N+17(N-1)+5 N=218,电气学院学习部资料库,80,谢谢大家!,电气学院学习部资料库,

    注意事项

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

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开