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

    微机原理ppt课件第03章.ppt

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

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

    微机原理ppt课件第03章.ppt

    微机原理与接口技术,李宝平计算机学院通信工程系,主要内容:,指令系统的一般概念操作数的寻址方式六大类指令的操作原理 操作码的含义 指令对操作数的要求 指令执行的结果,3.1 概述,指令 控制计算机完成指定操作的命令机器指令指令的二进制代码形式。例如:CD21H汇编指令助记符形式的指令。例如:INT 21H指令系统CPU所有指令及其使用规则的集合,8088/8086指令系统:(1)指令向后兼容(x86系列)(2)应用广泛,资料易于寻找,指令按功能分为六大类(92种),参见 附录1 8086/8088 指令系统 P458,(1)数据传送类;(2)算术运算类;(3)逻辑运算和移位;(4)串操作;(5)控制转移类;(6)处理器控制。,3.1.1 指令的基本构成,操作码,操作数,,操作数,说明要执行的是什么操作,操作对象,可以有0个、1个或2个,目的,源,标号:,指令举例:,ADD AX,SI+6,MOV AX , BX,操作码 操作数,INC BX,HLT,部分8088/8086常用指令,8088/8086的操作数分为4类,1、立即数(常数)源操作数就是参加操作的数据本身,它们可以是8位或16位。取值范围如下表:,立即数只能用作源操作数,如,MOV AX,0FA00H;正确MOV 8000H,DX;错误,操作数,数据(立即数),地址: 寄存器(名称)、存储器单元(地址) I/O接口的端口(地址),2、寄存器操作数,放在8个通用寄存器或4个段寄存器中的操作数,表示参加运算的数存放在指令给出的寄存器中,可以是16位或8位。,只能存放字操作数,段寄存器存放当前操作数的段基地址,可作为源或目的操作数(但CS不作为目的操作数), 不允许将立即数传送到段寄存器, 可通过某个通用寄存器传递改变,SI,DI,BP,SP,CS,DS,ES,SS,3、存储器操作数,存储器操作数,字节字双字,124,类型,存储单元个数,一般不允许两个操作数同时为存储器操作数,Flags 标志寄存器: 仅有个别指令可用它作为操作数 IP 不能用指令指针寄存器: 它作为操作数, 顺序执行时它自动加1,跳转执行时自动会跳转,表示当前参加运算的数存放在存储器的某1/2/4个单元中,存储单元的物理地址 = 段基地址16 + 偏移地址,若指令中没有指明所涉及的段寄存器,CPU就采用默认的段寄存器来确定操作数所在的段。,表3.3 段寄存器使用的一些基本约定,8086规定了访问存储器段的规则:此规则定义了段地址寄存器和偏移地址寄存器的组合方式,其默认规则如下表:,存储器操作数的偏移地址(也称有效地址EA)要用“EA”方括号括起来, 它可以通过不同的寻址方式由指令给出; 存储器操作数的段基地址(也称段头地址)一般省去,按隐含规则确定它们,也可直接给出进行段超越。例如 若(BX)=2000H, (SI)=0A00H, (DI)=2A00H, 则以下指令的结果是一样的:MOV AL, 2A00H ;隐含段头为DS,直接寻址MOV AL, BX+0A00H ;隐含段头为DS ,寄存器相对寻址MOV AL, BXSI ;隐含段头为DS,基址-变址寻址MOV AL, DI ;隐含段头为DS,寄存器间接寻址但 MOV AL, ES:2A00H ; 段超越,段头为ES,与前4条不同,存储单元的物理地址 = 段基地址16 + 偏移地址,注意:存储器数据表示形式: ,地址值或寄存器,、I/O接口操作数,I/O接口操作数,字节字,12,类型,存储单元个数,一般不允许两个操作数同时为I/O接口操作数,I/O接口地址为16位,一般采用DX寄存器间接寻址给出;有时I/O接口地址仅用8位,这时可采用直接寻址。,例如:IN AL,DX; 括号习惯都省去写为 IN AL,DX OUT 80H,AL;括号习惯都省去写为 OUT 80H,AL,注意:不要理解为:MOV AL, DX 和MOV 80H,AL ,它们完全不同。,表示当前参加运算的数存放在I/O接口的某1/2个端口中,一条指令的执行时间=,3.1.2 指令的执行时间,取指令取操作数执行指令传送结果,单位用时钟周期数T表示,常用指令执行时间 P458计算偏移地址EA所需时间,结论: 1)尽量使用寄存器作为操作数 2)若有可能,用移位代替乘除法 3)尽量使用简单的寻址方式,执行,寻址方式寻找操作数的方法 寻找操作数的地址(一般指源操作数) 寻找要执行的下一条指令的地址在8086指令系统中,操作数所在地址的寻址方式可分为8种: 立即寻址 寄存器相对寻址 直接寻址 基址-变址寻址 寄存器寻址 相对的基址-变址寻址 寄存器间接寻址 隐含寻址,3.2 8086的寻址方式,操作数(为一常数)直接由指令给出 (此操作数称为立即数) 立即寻址只能用于源操作数 例: MOV AX, 1C8FH MOV BYTE PTR2A00H, 8FH 错误例: MOV 2A00H, AX ; 错误!,3.1.2 立即寻址,立即数,操作码,低8位,高8位,存储器,MOV操作码,02H,31H,AH,AL,代码段,代码段,立即寻址指令在存储器中的存放形式,AX,指令操作例:MOV AX,3102H ; AX 3102H 执行后,(AH) = 31H,(AL) = 02H,用途:直接给出操作数据,立即数存放在内存的代码段中,3.2.3 寄存器寻址,操作数放在某个寄存器中 源操作数与目的操作数字长要相同 寄存器寻址与段地址无关 例: MOV AX, BX MOV 3F00H, AX MOV CL, AL 错误例: MOV AX, BL ; 字长不同 MOV ES: AX, DX ; 寄存器与段无关,AX,SI,2233H,2233H,指令操作例:MOV SI,AX ; SI (AX) 指令执行前:(AX)=2233H 指令执行后:(AX)=2233H,(SI)=2233H,用途:操作数存放在寄存器中,根据寄存器名称寻找寄存器里面的数据。,3.2.2 直接寻址,指令中直接给出存储器操作数的16位偏移地址 或I/O接口仅8位端口地址 存储器偏移地址也称为有效地址(EA, Effective Address)存储器默认的段寄存器为DS, 但也可以显式地指定其他段寄存器称为段超越前缀存储器偏移地址也可用符号地址来表示,如ADDR、VAR 例: MOV AX , 2A00H; 段头隐含为DS MOV DX , ES: 2A00H;段超越 MOV SI , TABLE_PTR; 段头隐含为DS还有: IN AL,90H;括号可以省去 OUT 85H,AL;括号可以省去,例:MOV AX,3102H ;AL (3102H) , AH (3103H),如果(DS)=2000H, (23102H) = CDH, (23103H) = ABH则操作数的物理地址为: 20000H+3102H = 23102H指令执行后:(AX) = ABCDH,MOV操作码,02H,31H,AH,AL,23102H,CDH,ABH,存储器,代码段,数据段,.,23103H,用途:用于操作数存放在存储器单元中 或I/O接口地址仅为8位的的端口中,3.2.4 寄存器间接寻址,操作数的偏移地址(有效地址EA)放在寄存器中 只有SI、DI、BX和BP可作间址寄存器 例: MOV AX, BX MOV CL, CS:DI IN AL, DX;括号可省去 OUT DX,AL;括号可省去 错误例 : MOV AX, DX MOV CL, AX,EA =,(BX)(BP)(SI)(DI),指令操作例:MOV AX,SI若 (DS)=6000H, (SI)=1200H, (61200H)=44H, (61201H)=33H则指令执行后,(AX)=3344H。,用途:操作数存放在存储器或I/O接口地址为16位的的寻址,3.2.5 寄存器相对寻址,EA=间址寄存器的内容 + 8/16位的位移量,寄存器相对寻址常用于存取表格或一维数组中的元素把表格的起始地址作为位移量,元素的下标值放在间址寄存器中(或反之),EA =,(BX)(BP)(SI)(DI),+,8位16位,位移量,例: MOV AX, BX+8 MOV CX, TABLESI MOV AX, BP+1000H ; 默认段寄存器为SS 指令操作例:MOV AX,DATABX 若(DS)=6000H, (BX)=1000H, DATA=2A00H, (63A00H)=66H, (63A01H)=55H 则物理地址 = 60000H + 1000H + 2A00H = 63A00H 指令执行后:(AX)=5566H(见下页图示),操作码,00 偏移量低,2A 偏移量高,DS 60000,BX 1000,+ DATA 2A00,63A00,63A00H,AH,AL,AX,代码段,数据段,.,.,.,66H,55H,MOV AX,DATABX,用途:操作数存放在存储器地址指定的单元中,3.2.6 基址-变址寻址,若操作数的偏移地址: 由基址寄存器(BX或BP)给出 基址寻址方式 由变址寄存器(SI或DI)给出 变址寻址方式,由一个基址寄存器的内容和一个变址寄存器的内容相加而形成操作数的偏移地址,称为基址-变址寻址。,EA =,(BX)(BP),+,(SI)(DI),同一组内的寄存器不能同时出现。,基址寄存器,变址寄存器,例: MOV AX, BX SI MOV AX, BX+SI MOV AX, DS: BP DI错误例: MOV AX, BX BP MOV AX, DI SI,用途:操作数存放在存储器地址指定的单元中,83000,操作码,DS 80000,BX 2000,+ SI 1000,83000H,AH,AL,AX,代码段,数据段,.,.,.,YY,XX,指令操作例:MOV AX,BXSI假定:(DS)=8000H, (BX)=2000H, SI=1000H则物理地址 = 80000H + 2000H + 1000H = 83000H指令执行后: (AL)=83000H (AH)=83001H,3.2.7 相对的基址-变址寻址,在基址-变址寻址的基础上再加上一个相对位移量 注意事项同基址-变址寻址,EA =,(BX)(BP),+,(SI)(DI),+,8位16位,位移量,例:,MOV AX,BASE SI BXMOV AX,BX+BASE SIMOV AX,BX+SI+BASEMOV AX,BX BASE SIMOV AX,BX+SI BASE,基址,变址,用途:操作数存放在存储器地址指定的单元中,指令操作例:MOV AX,DATADIBX若(DS)=8000H, (BX)=2000H, (DI)=1000H, DATA=200H则指令执行后(AH)=83021H, (AL)=83020H,83200,83200H,AH,AL,AX,+ DATA 0200,操作码,代码段,数据段,.,.,.,YY,XX,DS 80000,BX 2000,DI 1000,使用相对的基址-变址寻址方式可以很方便地访问二维数组。,基址寄存器,数组首地址,变址寄存器,数组元素行址,位移量,数组元素列址,(偏移地址),二维数组例:内存图示(按行存储),(行位移地址),(行内元素下标),这种寻址方式为386以上处理器采用: 将第二个寄存器与比例因子相乘,比例因子可以是1、2、4、8。分别对应字节、字、双字、四字数组。 例如:MOV EAX+2*EDI+100H,CXMOV AL,EBP+2*EDI-2MOV EAX,ARRAY4*ECX,3.2.8 比例变址寻址,3.2.9 隐含寻址,指令操作数是隐含的,在指令中未显式地指明。 例:MUL BL 指令隐含了被乘数AL及乘积AX 类似的指令还有:XLAT、DIV、CBW、MOVS等,(AL)(BL)AX,用途:操作数存放在寄存器或存储器地址指定的单 元中,如何寻找指令的地址呢?,(1)程序中将要执行的指令的地址由CS:IP指向;(2)程序的第一条指令的地址(首地址)由操作系统OS分配产生;(3)一般程序是一条接着一条的顺序执行的,所以CS:IP自动加1即可实现。(4)当程序跳转执行时,CS:IP采用直接方式或间接方式改为跳转到的指令地址。,3.3 程序转移地址寻址方式,第四章 80X86的寻址方式和指令系统,段内转移只需改变 (IP)段内转移包括两种寻址方式:直接 ,间接。段间转移改变(CS)(IP)段间转移包括两种寻址方式: 直接 ,间接。功能:用来确定转移指令及CALL指令的转移地址。以转移指令为对象来分析各种转移地址寻址方式。,(一)段内直接寻址(Intrasegment direct addressing)(二)段内间接寻址(Intrasegment indirect addressing)(三)段间直接寻址(Intersegment direct addressing)(四)段间间接寻址(Intersegment inderect addressing),(一)段内直接寻址(Intrasegment direct addressing),转向有效地址EA是(IP)当前 和指令中指定的8位或16位位移量之和。 对于近转,16位位移量可正可负,范围是3276832767 对于短转,8位位移量可正可负,范围是 128127,这种寻址方式适用于条件转移及无条转移指令。 当用于条件转移指令时,位移量只允许 8 位; 用于无条件转移指令时,位移量 8 位时称为 短跳转。,指令汇编语言格式: JMP NEAR PTR PROGIA;(IP)(IP)当前+16位位移量 JMP SHORT QUEST; (IP)(IP)当前+8位位移量调用指令(CALL)也适用。 PROGIA、 QUEST 均为转向符号地址,机器中用位移量表示。汇编指令中16位位移量,则在符号地址前加操作符 NEAR PTR。,JMP NEAR PTR PROGIA; (IP)(IP)当前+16位位移量,段内直接寻址JMP NEAR PTR PROGIA,OP,00H,12H,.,.,OP,03H,PROGIA=3172AH,(IP),当前,=,3052AH,16位的位移量,3172AH-3052AH,存储器,跳转,(二)段内间接寻址(Intrasegment indirect addressing)段内间接寻址:转向有效地址是一个寄存器或一个存储单元的内容,这内容可以用数据寻址方式中除立即数以外的任何一种寻址方式取得。得到的转向有效地址用来取代IP寄存器的内容。这种寻址方式和以下二种段间寻址方式都不能用于条件转移指令。* 条件转移指令只能适用段内直接寻址的8位位移量。,汇编格式: JMP BX JMP WORD PTR BP + TABLE其中: WORD PTR操作符, (BP)+TABLE 寻址所得地址,是一个字的有效地址,由有效地址形成物理地址里的内容即为转向有效地址IP。转向物理地址的计算公式:PA=16d(CS)+(IP),段内间接寻址方式的转移指令中转移的有效地址的计算方法:举例: 指令执行前:设:(DS)=2000H,(BX)=1256H,(SI)=528FH,TABLE=20A1H,(232F7H)=3280H,(264E5H)=2450H 例1、JMP BX 指令执行后: (IP)=1256H,例2、JMP WORD PTR TABLEBX指令执行后: PA= 16d(DS)+(BX)+TABLE = 232F7H (IP) = 3280H=(232F7H)例3、JMP WORD PTR BXSI 指令执行后:PA= 16d (DS)+(BX)+(SI)= 264E5H (IP) = 2450H=( 264E5H)注意:如果指令操作数已被定义为16位的存储器,则: WORD PTR 可以省去。,(三)段间直接寻址:(Intersegment direct addressing)指令中直接提供了转向段地址和偏移地址。用指令中指定的偏移地址 (IP)用指令中指定的段地址 (CS)完成了从一段到另一段的转移操作指令汇编语言格式:JMP FAR PTR NEXTROUTINTNEXTROUTINT 转向的符号地址 FAR PTR 段间转移操作符OFFSET NEXTROUTINT (IP) SEG NEXTROUTINT (CS),例:JMP FAR PTR CCC,OP,34H,12H,00H,50H,.,.,.,.,存储器,2000:1000H,JMP FAR CCC,CCC:,5000:1234H,.,2000H段,5000H段,(四)段间间接寻址(Intersegment inderect addressing)用存储器中二个相继字的内容取代IP、CS以达到段间转移目的。存储单元的地址是由指令指定除立即数方式和寄存器方式以外的任何一种寻址方式取得。指令汇编语言格式:JMP DWORD PTR INTERS+BXDWORD PTR双字操作符,转向地址双字(段间转移)INTERS+BX数据寻址方式为直接变址寻址方式* 段间转移必须是无条件转移。,例:JMP DWORD PTR BX指令执行前:设:(DS)=4000H,(BX)=1212H(41212H)=1000H(41214H) =4A00H指令执行后:(IP)=1000H (CS)=4A00H,小结,指令由( )和( )构成,如何取得操作数称为( ),操作码,操作数,寻址方式,寻址方式可分8种,立即寻址,直接寻址 - 针对M、I/O,寄存器相对寻址 - 针对M,寄存器寻址 - 针对R,基址-变址寻址 - 针对M,基址-变址相对寻址- 针对M,寄存器间接寻址 - 针对M、I/O,隐含寻址 - 针对R、M,寄存器间接、寄存器相对、基址变址、相对基址变址4种寻址方式的比较: 寻址方式 指令操作数形式 寄存器间接 只有一个寄存器(BX/BP/SI/DI之一) 寄存器相对 一个寄存器加上位移量 基址变址 两个不同类别的寄存器 相对基址-变址 两个不同类别的寄存器加上位移量,为便于理解指令的形式和功能,对指令中操作 符号的约定如下: 大小写字母无区别 oprd: 泛指各类操作数; oprd1, oprd2: 多操作数指令中, oprd1为目标操 作数,oprd2为源操作数; dest, src: 目的操作数, 源操作数 reg: 8位或16位的通用寄存器; sreg: 段寄存器; acc: 累加器al或ax,3.3 8086/8088指令系统,reg8: 8位通用寄存器; reg16: 16位通用寄存器; mem: 8位或16位存储器; mem8: 8位存储器; mem16: 16位存储器;disp: 8位或16位存储器地址偏移量; imm或data: 8位或16位立即数; imm8: 8位立即数; imm16: 16位立即数; port : I/O端口地址, port端口号0255 ; : 存储单元的内容或偏移地址。,可分成如下6类: 数据传送指令 算术运算指令 逻辑运算和移位指令 串操作指令 程序控制指令 处理器控制指令,3.3.1 数据传送指令,可实现 存储器 寄存器 I/O 数据传送指令又可分为如下四种: 通用传送 目标地址传送 标志传送 输入输出,表 4-1 数据传送类指令表,1.通用传送指令(1) MOV dest,src; destsrc 传送的是字节还是字取决于指令中涉及的寄存器是8位还是16位。 具体来说可实现: MOV mem/reg1,mem/reg2 指令中两操作数中至少有一个为寄存器 例: MOVCL,DL MOVAX,BX MOVSI,CX MOVCL,BX+5, MOV reg,data ;立即数送寄存器 MOV mem,data ;立即数送存储单元 MOV acc,mem ;存储单元送累加器 MOV mem,acc ;累加器送存储单元 MOV segreg,mem/reg ;存储单元/寄存器送 段寄存器 MOV mem/reg,segreg ;段寄存器送存储单 元/寄存器,MOV指令使用规则:,1) IP不能作目的寄存器2) 不允许memmem3) 不允许segregsegreg4) 立即数不允许作为目的操作数5) 不允许segreg立即数6) 源操作数与目的操作数类型要一致,几个不能传送的解决办法:用AX作桥梁存储器存储器: MOV AX,MEM1 MOV MEM2,AX段寄存器段寄存器: MOV AX,DS MOV ES,AX段寄存器立即数: MOV AX,DATA MOV DS,AX,应用举例:将1000H开始的100个存储单元 全部填充为ASCII码2AH(*)。程序段如下(例001) MOV DI,1000H MOV CX,64H MOV AL,2AH;*AGAIN:MOV SI,AL INC SI DEC CX JNZ AGAIN HLT,上程序段存放在代码段中,设(CS)=109EH,则各条指令存放地址如下: CS : IP 指令109E : 0100 MOV DI,1000H109E : 0103 MOV CX,64H109E : 0106 MOV AL,2AH109E : 0108 MOV DI,AL109E : 010A INC DI109E : 010B DEC CX109E : 010C JNZ 0108109E : 010E HLT109E : 0110,写入2AH(*)后,数据段中相应存储单元的内容改变如下:DS:1000 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2ADS:1010 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2ADS:1020 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2ADS:1030 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2ADS:1040 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2ADS:1050 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2ADS:1060 2A 2A 2A 2A,例:把内存中首地址为MEM1的200个字节送到首地址为MEM2的区域中,编程。(例002),MOV SI, OFFSET MEM1 MOV DI, OFFSET MEM2 MOV CX, 200NEXT: MOV AL, SI MOV DI, AL INC SI INC DI DEC CX JNZ NEXT HLT,什么是堆栈? 按“后进先出(LIFO)”方式工作的存储区域。堆栈以字为单位进行压入弹出操作。为什么要设置堆栈?为什么要按 “后进先出”方式工作?参见下图,(2) 堆栈操作指令,主程序,IP,继续执行,主程序,执行子程序,转子程序,压栈,弹出,返回主程序,主程序,IP,IP(下),继续执行,主程序,转子程序1,返回主程序,IP,执行子程序 2,转子程序2,返回子程序1,IP(下),执行子程序1,继续执行,子程序1,(a),(b),子程序调用示意图,(a) 主程序调子程序; (b) 子程序嵌套示意图,压栈,弹出,IP(下),规定由SS指示堆栈段的段基址,堆栈指针SP始终指向堆栈的顶部,SP的初值规定了所用堆栈区的大小。堆栈的最高地址叫栈底。,SP,SS,堆栈段,进栈方向,退栈方向,栈底,栈顶, 压栈指令 PUSH src ; src为16位操作数 例:PUSHAX;将AX内容压栈 执行操作:(SP)-1高字节AH (SP)-2低字节AL (SP)(SP)- 2,设(AX)=1020H,执行示意图如图所示,低地址,存储区(SS段),执行前(AX)=1020,(SP),存储区(SS段),进栈方向,执行后,20,10,(AL),(AH),PUSH AX指令执行示意图,(SP)-2,(SP),高地址,低地址,高地址,(SP)-1,压栈指令的格式为: PUSH reg PUSH mem/reg PUSH segreg例如: PUSH AX PUSH BX PUSH DS,注意:进栈方向是高地址向低地址发展 (向上生成)。, 弹出指令 POPdest例:POPBX;将栈顶内容弹至BX 执行操作:(BL)(SP) (BH)(SP)+1 (SP)(SP)+2,POP BX 的执行示意图如下图所示,低地址,存储区(SS段),出栈方向,执行前,20,10,POP BX指令执行示意图,(SP),存储区(SS段),执行后(BX)=1020,(SP),(SP)+1,(SP)+2,BX,20,10,高地址,低地址,高地址,堆栈指令使用时应注意几点:堆栈操作总是按字进行不能从栈顶弹出一个字给CS堆栈指针为SS:SP,SP永远指向栈顶SP自动进行增减量(-2,+2),例子(例003),mov ax,9000hmov ss,axmov sp,0E200hmov dx,38FFhpush dxpush axpop dxpop ax,格式:XCHG reg/mem,mem/reg功能:交换两操作数的内容。 要求:两操作数中至少有一个在寄存器中; 操作数不能为段寄存器和立即数; 源和目地操作数类型要一致。举例: XCHGAX,BX XCHG2000,CL XCHG2000,CX(例004),(3)交换指令XCHG,(4). 输入输出(I/O)指令,只限于用累加器AL或AX来传送信息。功能: (累加器)I/O端口输入指令IN格式: IN acc,PORT ;PORT端口号0255 IN acc,DX ;DX表示的端口范围达64K例:IN AL,80H ;(AL)(80H端口) IN AL,DX ;(AL)(DX),例:OUT 68H,AX ;(69H,68H)(AX) OUT DX,AL ;(DX)(AL)在使用间接寻址的IN/OUT指令时,要事先用传送指令把I/O端口号设置到DX寄存器,如: MOV DX,220H IN AL,DX ;将220H端口内容读入AL, 输出指令OUT格式:OUT port,acc OUT DX,acc,(5)查表指令XLAT 执行的操作:AL(BX)+(AL) 又叫查表转换指令,它可根据表项序号查出表中对应代码的内容。执行时先将表的首地址(偏移地址)送到BX中,表项序号存于AL中。 例:内存数据段有一张小写字母的ASCII码表,如欲查出表中第3个代码(代码序号从0开始),程序如下: (例005),mov bx,offset mem1;(BX)表首地址mov al,3 ;(AX)序号Xlat ; 查表转换mov dl,almov ah,2int 21h执行后得到:(AL)= 64H = d,注意:转换表长度最大为256个表项(字节)。,(5)字节-字转换指令,格式:CBW ;把AL的符号位复制到AH 即8位带符号数AL16位带符号数AX=AH AL, 真值不变 CWD ;把AX的符号位复制到DX 即16位带符号数AX 32位带符号数DX AX, 真值不变用途:用于有符号数的除法。例如:(AL) = A7H,则执行CBW后,AH的内 容为FFH。注意: 带符号数扩展与无符号数扩展的区别,2. 地址传送指令共有三条:格式:LEA reg,mem ; 将指定存储器的16位偏移 地址送指定寄存器(例005) LDS reg, mem32; DS: reg mem开始的四 个内存单元) LES reg, mem32; 同上,但DS改为ES 要求源操作数必须是一个内存操作数,目的操作数必须是一个16位的通用寄存器。,设:(SI)=1000H则执行该指令后,(BX)=1010H注意:以下两条指令差别: LEA BX,BUFFER ; 将符号地址为BUFFER的存储单元的偏移地址取到 BX中; MOV BX,BUFFER ;将BUFFER存储单元中的内容取到 BX中.,例:LEA BX,SI+10H,下面两条指令等效: LEA BX,BUFFER MOV BX, OFFSET BUFFER其中OFFSET BUFFER表示存储器单元BUFFER的偏移地址。二者都可用于取存储器单元的偏移地址,但LEA指令可以取动态的地址,OFFSET只能取静态的地址。,4.标志传送指令共有四条:(1)读标志指令LAHF (例006) LAHF把标志寄存器低8位中的5个标志位传送到AH中的指定位,如下图所示:,OF,DF,IF,TF,SF,ZF,AF,PF,CF,AH,LAHF指令的功能,FLAG,(2)设置标志指令SAHF SAHF的功能与LAHF的功能正好相反,用图来示意,只要将上图中5个箭头方向反一下即可。,OF,DF,IF,TF,SF,ZF,AF,PF,CF,AH,SAHF指令的功能,FLAG,执行的操作:(SP)-1标志寄存器高8位 (SP)-2标志寄存器低8位 (SP)(SP)-2(4)从栈顶弹出标志寄存器指令POPF 执行的操作:标志寄存器低8位(SP) 标志寄存器高8位(SP)+1 (SP)(SP)+2 PUSHF和POPF指令用于保护和恢复标志寄存器内容。,(3)把标志寄存器推入栈顶指令PUSHF,例如: PUSHAX PUSHCX PUSHF ;保护标志寄存器内容 ;这段程序要用到AX,CX以及标志位 POPF ;恢复标志寄存器内容 POPCX POPAX,. . .,数据传送指令中,除SAHF和POPF这两条指令外,其余所有指令均不影响标志位(即标志寄存器FLAGS的6个状态标志)。,3.3.2 算术运算指令,涉及两种类型数据: 无符号数和有符号数。对加减法指令,无符号和有符号数可采用同一套指令,但应注意: 参加的操作数必须都是无符号数或都是有符号数。 需使用不同的标志位(CF,OF)来检查无符号数和有符号数的运算结果是否溢出。 这类指令一般都影响标志寄存器FLAGS。,表4 - 2 算术运算类指令表,两个8位数相加时有4种情况:,无符号数和有符号数均不溢出二进制相加 无符号数加 有符号数加 0000 1000 8 +8+0001 1110 + 30 + (+30) 0010 0110 38 +38 结果38 CF=0 OF=0,无符号数范围0255 带符号数范围-128127, 无符号数溢出 无符号数 有符号数 0000 1000 8 +8+1111 1101 +253 +(-3)10000 0101 261 +5 结果5 CF=1 OF=0 有符号数溢出 0000 1000 8 +8+0111 1101 +125 +(+125) 1000 0101 133 +133结果-123 CF=0 OF=1(补码表示), 无符号数和有符号数均溢出 无符号数 有符号数 1000 1000 136 -120+1111 0111 +247 +(-9)10111 1111 383 -129 结果127 CF=1 OF=1 上面四种情况说明, CF标志可用来表示无符号数的溢出, OF标志可用来表示有符号数的溢出。 有符号数的溢出是一种出错状态,在运算过程中应当避免。,所有的算术运算指令,都会影响FLAGS标志寄存器的6个状态标志CF/OF/ZF/SF/AF/PF(3个控制标志IF/DF/TF不受影响)。总的讲,有这样一些规则: 当无符号数运算产生溢出(即最高位向前有进位 或借位)时,CF=1,否则为0; 当有符号数运算产生溢出时,OF=1(即OF=CFCF-1) , 否则为0; 当运算结果为0时,ZF=1 ,否则为0; 当运算结果为负数时,SF=1 ,否则为0; 当运算一半位置有进位或借位时,AF=1 ,否则为0; 当运算结果中有偶数个时,PF=1 ,否则为0。,(1) 不带进位的加法指令ADD 格式: ADD acc,data ADD mem/reg,data ADD mem/reg1,mem/reg2注:1.源和目的操作数不能同时为存储器操作数 2.不能把段寄存器作为操作数例:ADDAL,30H ADDAX,BX+20H ADDCX,SI ADDDI,200HADD指令对标志位(指6个状态标志)都有影响。,1.加法指令(共5条),(2) 带进位位的加法指令ADC,ADC指令在形式上和功能上都有与ADD类似,只是相加时还要包括进位标志CF的内容。 例如: ADC AL,68H ;AL(AL)+68H+(CF) ADC AX,CX ;AX(AX)+(CX)+(CF) ADC BX,DI ;BX(BX)+DI+1DI+(CF),例:有两个4字节的无符号数相加: 2C 56 F8 AC + 30 9E 47 BE = ? 设被加数、加数分别存放在BUFFER1及BUFFER2开始的两个存储区内,结果放回BUFFER1存储区,如下页图所示。 因CPU只能进行8位或16位的加法运算,为此可将加法分4次进行。,ADC指令主要用于多字节加法运算中,56H,2CH,BEH,47H,BUFFER1,BUFFER2,ACH,F8H,9EH,30H,被加数,加数,数据段,多字节加法示意图,.,.,程序段如下: MOV CX,4 ;置循环次数 MOV SI,0 ;置SI初值为零 CLC ;清进位标志CFLL: MOV AL,BUFFER2SI ADC BUFFER1SI,AL ;带进位加 INC SI ;(SI)+1 DEC CX ;(CX)-1 JNZ LL ;若(CX)0,则转LL思考:若最高位有进位,如何改?,ADD/ADC指令对条件标志位(CF/OF/ZF/SF)的影响:,CF位表示无符号数相加的溢出。OF位表示带符号数相加的溢出。,格式:INC reg/mem功能:类似于C语言中的+操作:对指定的操作数加1 例: INC AL INC SI INC BYTE PTRBX+4注意:本指令不影响CF标志,但对AF/OF/PF/SF/ZF会产生影响。,3) 加1指令INC(单操作数指令),(1) 不考虑借位的减法指令SUB 格式: SUB dest, src 操作: dest(dest)-(src)注:1.源和目的操作数不能同时为存储器操作数 2.不能把段寄存器作为操作数指令例子: SUB AL,60H SUB BX+20H,DX SUB AX,CX,2. 减法指令,SBB指令主要用于多字节的减法。格式: SBB dest, src操作: dest(dest)-(src)-(CF)指令例子: SBB AX,CX SBB WORD PTRSI,2080H SBB SI,DX,(2) 考虑借位的减法指令SBB,例:x、y、z均为32位数,分别存放在地址为X, X+2;Y,Y+2;Z,Z+2的存储单元中,用指令序列实现wx+y+24-z,结果放在W, W+2单元中。(例007) MOV AX, X MOV DX, X+2 ADD AX, Y ADC DX, Y+2 ; x+y ADD AX, 24 ADC DX, 0 ; x+y+24 SUB AX, Z SBB DX, Z+2 ; x+y+24-z MOV W, AX MOV W+2, DX ; 结果存入W, W+2单元,作用类似于C语言中的”操作符。格式:DEC opr 操作:opr(opr)-1指令例子: DEC CL DEC BYTE PTRDI+2 DEC SI,(3) 减1指令DEC,注:该指令与INC一样,它不影响CF标志,但对AF/OF/PF/SF/ZF会产生影响。,格式: NEG opr操作: opr 0-(opr) 对一个操作数取补码相当于用0减去此操作数,故利用NEG指令可得到负数的绝对值。 例: 若(AL)=0FCH,则执行 NEG AL后, (AL)=04H,CF=1 本例中,0FCH为-4的补码,执行求补指令后,即得到4(-4的绝对值)。,(4) 求补指令NEG,SUB/SBB指令对标志位(CF/OF/ZF/SF)的影响:,CF=1表示无符号数减法溢出。 OF=1表示带符号数减法溢出。N

    注意事项

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

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开