分享
分享赚钱 收藏 举报 版权申诉 / 189

类型第4章 寻址方式与指令系统.ppt

  • 上传人:fmgc7290
  • 文档编号:8306382
  • 上传时间:2019-06-19
  • 格式:PPT
  • 页数:189
  • 大小:947.50KB
  • 配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    第4章 寻址方式与指令系统.ppt
    资源描述:

    1、第4章 寻址方式与指令系统,本章主要内容,1. 数据寻址方式 2. 转移地址寻址方式 3. 8086 指令系统及编程应用举例 4. 指令编码格式,4.1 寻址方式,4.1.1 数据寻址方式 1. 寻址方式概述,寻址方式,定义 :指令中如何提供操作数或操作数地址的方式称为寻址方式。规定如何对地址字段作出解释以找到操作数* 程序转移时需提供转移地址,这跟提供操作数地址在方法上没有本质区别,因此也归入寻址方式的范畴。,一个指令系统能够提供哪些寻址方式,能否为编制程序提供方便,这是指令系统设计的关键。需要说明的是,在不同的计算机系统中,寻址方式的名称和分类并不统一,但基本可以归结为以下几种方式或它们的

    2、变型或组合:,寻址方式的名称和分类,立即寻址(立即数寻址)寄存器寻址直接寻址间接寻址变址寻址,例如,Z80系统: 立即寻址 ;直接寻址立即扩展寻址;零页寻址隐含寻址;相对寻址寄存器寻址;变址寻址寄存器间接寻址;位寻址,两类寻址方式数据寻址方式 转移地址寻址方式 (重点讨论数据的寻址方式),2. 数据寻址方式,(1) 立即寻址(Immediate addressing) 指令中直接给出操作数,操作数紧跟在操作码之后,作为指令的一部分存放在代码段里,在取出指令的同时也就取出了操作数,立即有操作数可用,所以称之为立即寻址。,目的 源 example,MOV AL, 80H ; 低地址 存储器AXMO

    3、V AX, 3064H ; 代码ADD AL, 20H ; 段 ADD AX, 1090H; 高地址,立即数可以为8位,也可以为16位。如果是16位数,则“高位字节存放在高地址中,低位字节存放在低地址中。”立即寻址方式常用于给寄存器赋值,并且只能用于源操作数,而不能用于目的操作数。,下述各条指令源操作数的寻址方式也都是立即寻址,但这些指令都是错误的: MOV AL, 256 ; 256=100H,超过了AL能存放的数的范围MOV AX, -32769 ; -32769超过了AX能存放的带符号数(补码)范 围MOV 100H, AL ; 立即数不能作为目的操作数DEC 20 ; 单操作数指令不能

    4、使用立即数MOV DS, 1234H ; 源操作数是立即数,则目的操作数就不能是 段寄存器,(2)寄存器寻址(Register addressing),操作数在寄存器中,指令中指明寄存器号,这种寻址方式叫寄存器寻址。对于8位操作数,寄存器可以是 AH,AL,BH,BL, CH, CL, DH, DL .对于16位操作数,寄存器可以是AX, BX,CX, DX, SI, DI, SP ,BP,CS,DS,ES,SS (但CS 不能作目的寄存器),EXAMPLE,INC AX ; MOV AX, BX ;DEC AX ; ROL AH , 1 ;将AH中的内容循环左移一位,练习: MOV AX ,

    5、 BX ;正确。指令执行后, AXBX,但BX不变MOV AX, BL ;错误。源和目的的位数不相同MOV CS, AX ;错误。CS不能作为目的操作数MOV ES, DS ;错误。两个操作数不能都是段 寄存器,寄存器寻址的特点,(1) 操作数就在寄存器中,不需要访问存储器来取得操作数(指令执行时,操作就在CPU的内部进行),因而执行速度快。(2)寄存器号比内存地址短* 在编程中,如有可能,尽量使用这种寻址方式的指令。* 寄存器寻址方式既可用于源操作数,也可用于目的操作数,还可以两者都用于寄存器寻址方式(如 MOV BX , AX ),除以上两种寻址方式外,下面各种寻址方式的操作数均在存储器中

    6、,通过采用不同的寻址方式取得操作数地址,从而取得操作数。,(3)直接寻址(Direct Addressing),说明:在讨论寻址方式时,通常把操作数的偏移地址称为有效地址EA (Effective Address) ,EA可通过不同的寻址方式来得到。在直接寻址方式中,指令中直接给出操作数的有效地址,或者说,有效地址EA就在指令中。它(操作数的有效地址,而不是操作数本身)存放在代码段中指令的操作码之后,但操作数一般存放在数据段中。,例 1. MOV AX , DS:2000H;如(DS)= 3000H, 则指令的执行情况如下图所示:,代 存储器 采用直接寻址方式,如果没 码 有用“段跨越前缀”标

    7、明操作 段 数在哪一段,就默认段寄存 为DS.30000H 数 AX据 段 32000H 执行结果:(AX)=3050H,也允许数据存放在数据段以外的其它段(如附加段)。此时应在指令中给出 “跨越段前缀”。例 2: 如数据在附加段中,则应指明“段跨越缀” 。MOV AX , ES : 3000H 或 ES: MOV AX , 3000H* 为了使指令字不要过长,规定双操作数指令不能两个操作数都用直接寻址方式。如 MOV DS: 2000H , DS:3000H,寄存器间接寻址 (Register indirect Addressing),采用寄存器间接寻址方式时,指令中给 出寄存器号(寄存器为

    8、BX,BP,SI和DI之一), 被指定的寄存器中存放着操作数的有效地址,操作数在存储器中(以寄存器的内容为操作数的有效地址)。(BX) 对应段寄存器为 DSEA= (BP) SS(SI ) DS(DI) DS,Example,MOV AX , BX ;设 ( DS) = 2000H ,(BX) = 1000H 物理地址20000H 1000H =21000H*指令中也可以通过AX . “段跨越前缀”取得数 其他段中的数据, 据 例如: 段 MOV AX,ES: BX21000H指令的执行结果为:(AX) = 50A0H,(5)寄存器相对寻址(Register relative addressi

    9、ng),操作数的有效地址是一个基址或变址寄存器的内容与指令中指定的8位或16位位移量(Displacement)之和。如下图所示:,(BX) 8位位移量 EA = (BP) + (SI) 16位位移量(DI)若没有段跨越前缀,则对于寄存器BX,SI, DI的情况,段寄存器为DS; 对于寄存器为BP的情况,则段寄存器为SS。,Example,MOV AX, SI+3000H 操 设(DS)4000H,(SI)=2000H 作 物理地址 码40000H+2000H+3000H 位 45000H 移量 指令的执行情况如 右图 AX 40000H43000HSI 数45000H 据段,这种寻址方式可用

    10、于表格的处理,通过位移量来设置表格的首地址; 利用修改基址寄存器或变址寄存器的内容来获得表项的值。,(6)基址变址寻址(Based indexed addressing),操作数的有效地址是一个基址寄存器和一个变址寄存器内容之和,两个寄存器均由指令指定。(BX) (SI) 若基址寄存器为BX,则段寄存器为DS EA + (BP) (DI) 若基址寄存器为BP,则段寄存器为SS,Example,例:MOV AX,BX+DI设(DS)=2100H, (BX)=0158H, (DI)=10A5H.则 EA= 0158H+10A5H=11FDH物理地址21000H+11FDH=221FDH(BX) 2

    11、1000H 21158H AX221FDH,这种寻址方式同样适用于表格(或数组)的处理,表的首地址可存放在基址寄存器中,而用变址寄存器来访问表格中的各项。 由于两个寄存器都可以修改,使 用起来更灵活。,(7 )相对基址加变址寻址(Relative based indexed address),也称“带位移量的基址加变址寻址方式”.操作数的有效地址是一个基址寄存器和一个变址寄存器内容与8位或16位位移量之和。(BX) (SI) 用BX,则段寄存器为 DSEA= + + 位移量(BP) (DI) 用BP,则段寄存器为 SS,例:MOV AX,BX+SI+0250H,设(DS)=3000H,(BX)

    12、=2000H,(SI)=1000H,则 代 EA 2000H+1000H+0250H=3250H 码 物理地址30000H+3250H=33250H 段30000H位移量 AX 30250H 数 (BX) 32250H 据 (SI) 33250H 段,这种寻址方式可用于访问二维数组。 设数组元素在内存中按行顺序存放(首先放第一行所有元素,再放第二行所有元素,)。通过改变基址寄存器(如BX)和变址寄存器(如SI)的值可以访问数组中不同行和列上的元素。若保持BX不变而SI改变,则可以访问同一行的所有元素。 若保持SI不变而BX改变,则可以访问同一列的所有元素。,数据的寻址方式的寻址过程(图示),.

    13、,指令,数据,寄存器,(1)立即寻址,数据,指令,寄存器,(2)寄存器寻址,图4-1 数据的寻址方式的寻址过程(1),EA,数据,指令,存储器,(3)直接寻址,寄存器,EA,指令,寄存器,(4)寄存器间接寻址,数据,存储器,图4-1 数据的寻址方式的寻址过程(2),数据,存储器,地址,寄存器,寄存器,指令,位移量,+,EA,(5)寄存器相对寻址,图4-1 数据的寻址方式的寻址过程(3),图4-1 数据的寻址方式的寻址过程(4),数据,存储器,基地址,寄存器,基址 寄存器,指令,变址 寄存器,+,EA,(6)基址变址寻址,变址值,寄存器,图4-1 数据的寻址方式的寻址过程(5),数据,存储器,基

    14、地址,寄存器,基址 寄存器,指令,变址 寄存器,+,EA,(7)基址变址相对寻址,变址值,寄存器,位移量,端口号,数据,指令,端口,(8)直接寻址,DX,端口号,指令,DX,(9)间接寻址,数据,端口,图4-1 数据的寻址方式的寻址过程(6),端 口 操 作 数,3 转移地址的寻址方式,有关术语和概念: 段内转移如果转移地址与该转移类指令在同一个代码段,这样的转移称为段内转移,也称近转移; 近转移时的转移地址只包含偏移地址部分,找到转移地址后,将转移地址送入IP即可实现转移(CS的内容不必改变)。,段间转移如果转移地址与该转移类指令位于不同的代码段,这样的转移称为段间转移,也称远转移; 远转移

    15、时的转移地址既包含偏移地址部分又包含段基值部分,找到转移地址后,将转移地址的段基值部分送入CS,将转移地址的偏移地址部分送入IP即可实现转移。,直接转移如果转移地址直接放在指令中,则这样的转移称为直接转移,视转移地址是绝对地址还是相对地址(即地址位移量)又可分别称为绝对转移和相对转移。间接转移如果转移地址间接放在其他地方,则这样的转移称为间接转移,视转移地址是在寄存器中还是在存储器中又可分别称为寄存器操作数(寄存器寻址)和存储器操作数(存储器寻址)。,以JMP指令为例,可将转移地址的各种寻址方式列出,如表4-2所示。,表4-2 转移地址的寻址方式,(1) 段内直接转移(直接近转移),特点:转移

    16、地址(通常就是近标号)直接包含在汇编形式的转移指令中,转移指令的机器代码中存放的是该标号与当前IP值的差(标号-IP),此差称为位移量,该位移量与转移指令一起存于代码段: 位移量被放在转移指令的操作码之后,也是“高字节放在高地址单元,低字节放在低地址单元”。在取转移指令时,此位移量即作为转移指令的一部分被取入CPU中。,执行转移指令时,将这个位移量加到IP上即可得到转移地址(标号的值),即IP+(标号-IP)=标号=转移地址 不必为找这个转移地址再去访问寄存器或存储器。例如,如果L是本段中的标号,则下述指令采用的是段内直接转移方式: JMP L; 机器指令中的位移量为L-IP,转移地址为L,(

    17、2) 段内间接转移(间接近转移), 寄存器操作数(也称寄存器寻址)例: JMP BX ; BX的内容为转移地址 存储器操作数(也称存储器寻址) (i) 直接寻址其特征是: 转移地址(偏移地址部分)在数据存储单元中,数据存储单元的地址在指令中直接给出。 例如,JMP WORD PTR DS:20;数据存储单元(DS:20)的一个字为转移地址,(ii) 寄存器间接寻址 其特征是: 转移地址(偏移地址部分)在数据存储单元中,数据存储单元的偏移地址在BX、BP、SI、DI之一中。 例如,下述指令采用的就是段内间接转移、寄存器间接寻址方式: JMPBX ;数据存储单元(DS:BX)的一个字为转移地址JM

    18、PBP ;数据存储单元(SS:BP)的一个字为转移地址 JMP DS:BP ;数据存储单元(DS:BP)的一个字为转移地址,(iii) 寄存器相对寻址其特征是:转移地址(偏移地址部分)在数据存储单元中,数据存单元的偏移地址是寄存器(BX、BP、SI、DI之一)的内容与位移量的和。 例如,下述指令采用的就是段内间接转移、寄存器相对寻址方式: JMPBX+20 ;数据存储单元(DS:BX+20)的一个字为转移地址JMPBP+20 ;数据存储单元(SS:BP+20)的一个字为转移地址 JMP DS:BP+20 ;数据存储单元(DS:BP+20)的一个字为转移地 址,(iv) 基址变址寻址其特征是:转

    19、移地址(偏移地址部分)在数据存储单元中,数据存储单元的偏移地址是基址寄存器(BX、BP之一)的内容和变址寄存器(SI、DI之一)的内容之和。例如,下述指令采用的就是段内间接转移、基址变址寻址方式: JMPBX+SI ;数据存储单元(DS:BX+SI)的一个字为转移地址JMPBP+SI ;数据存储单元(SS:BP+SI)的一个字为转移地址JMP DS:BP+SI ;数据存储单元(DS:BP+SI)的一个字为转移地址,(v) 基址变址相对寻址其特征是: 转移地址(偏移地址部分)在数据存储单元中,数据存储单元的偏移地址是基址寄存器(BX、BP之一)的内容、变址寄存器(SI、DI之一)的内容及位移量的

    20、和。 例如,下述指令采用的就是段内间接转移、寄存器间接寻址方式: JMPBX+SI+20 ;数据存储单元(DS:BX+SI+20)的一个字为转移地址 JMPBP+SI+20 ;数据存储单元(SS:BP+SI+20)的一个字为转移地址 JMP DS:BP+SI+20 ;数据存储单元(DS:BP+SI+20)的一个字为转移地址,(3) 段间直接转移(直接远转移),转移地址(通常就是远标号)直接包含在汇编形式的转移类指令中,也直接存放在转移类指令的机器代码中,它是转移类指令不可分割的一部分,位于转移类指令的操作码之后。 高字存放转移地址的段基值部分,低字存放转移地址的偏移地址部分。在取转移类指令时,

    21、此段基值和偏移地址作为转移类指令的一部分被取入CPU中,执行转移类指令时,不必为找转移地址再去访问寄存器或存储器。,例如,如果L是其他代码段中的标号,则下述指令采用的就是段间直接转移方式: JMP FAR PTR L ;在L左边通常要加上类型说明FAR PTR,(4) 段间间接转移(间接远转移),段间间接转移时的转移地址既包含偏移地址部分,又包含段基值部分,在数据存储器中占两个字:低字单元存放偏移地址,高字单元存放段基值。要在转移类指令中的地址表达式左边加上类型说明DWORD PTR。例如, JMP DWORD PTR B ;1 直接寻址 JMP DWORD PTR DS:20 ;2 直接寻址

    22、 JMP DWORD PTR BX ;3 寄存器间接寻址 JMP DWORD PTR BX+B ;4 寄存器相对寻址 JMP DWORD PTR BX+20 ;5 寄存器相对寻址 JMP DWORD PTR BX+SI ;6 基址变址寻址 JMP DWORD PTR BX+SI+B ;7 基址变址相对寻址 JMP DWORD PTR BX+SI+20 ;8 基址变址相对寻址,指令,转移地址,寄存器,(1)直接转移,转移地址,指令,寄存器,(2)寄存器间接转移,图4-2 转移地址的寻址方式的寻址过程(1),EA,转移地址,指令,存储器,(3)直接寻址,寄存器,EA,指令,寄存器,(4)寄存器间接

    23、寻址,转移地址,存储器,图4-2 转移地址的寻址方式的寻址过程(2),转移地址,存储器,地址,寄存器,寄存器,指令,位移量,+,EA,(5)寄存器相对寻址,图4-2 转移地址的寻址方式的寻址过程(3),图4-2 转移地址的寻址方式的寻址过程(4),转移地址,存储器,基地址,寄存器,基址 寄存器,指令,变址 寄存器,+,EA,(6)基址变址寻址,变址值,寄存器,图4-2 转移地址的寻址方式的寻址过程(5),转移地址,存储器,基地址,寄存器,基址 寄存器,指令,变址 寄存器,+,EA,(7)基址变址相对寻址,变址值,寄存器,位移量,4.1.2 8086/8088 指令系统,可以分为以下六类(四类)

    24、:传送指令算术运算指令逻辑运算和移位指令 运算类串操作指令转移指令处理器控制指令,一、传送指令,包括:通用传送指令和专用传送指令两类 通用传送指令:,(1) MOV 指令,立即数,存储器,直接寻址 寄存器间接寻址 寄存器相对寻址 基址变址寻址 基址变址相对寻址,通用寄存器,AX BX CX DX SI DI SP BP AL BL CL DL AH BH CH DH,段寄存器,DS ES SS,CS,例: MOV AL, BL MOV DI, AX MOV CX, DS:1000H MOV BL, 40 MOV WORD PTRSI , 01H BYTE PTR 字节长度标记 WORD PTR

    25、 字长度标记 DWORD PTR 双字长度标记 标志:所有通用传送指令都不影响标志位。,练习1,用MOV指令实现两内存字节单元内容的交换2035H2045H,用直接寻址方式实现,MOV BL, DS:2035H MOV CL, DS:2045H MOV DS:2045H, BL MOV DS:2035H, CL HLT,用寄存器间接寻址方式实现,MOV SI , 2035H MOV DI, 2045HMOV AH, SIMOV AL, DIMOV DS:2035H ,ALMOV DS:2045H ,AH,练习2,把数据块BLOCK1移到BLOCK22040H 2060H把2040H地址开始的1

    26、0个字节数据移到2060地址开始的10个字节单元处。,ANSWER,MOV SI, 2040H MOV DI, 2060H MOV CX, 0AHLOOP1: MOV BL, SI+09H;MOV DI+09H,BL ;DEC SI DEC DI DEC CX JNZ LOOP1HLT,练习3,把2040H地址开始的10个字节单元的内容与2060H地址开始的10个字节单元内容互换。, MOV BL,SI+09H MOV AL,DI+09H MOV SI+09H,AL MOV DI+09H,BL ,(2) PUSH指令和POP指令,堆栈的图示: 压入:格式 PUSH SRC(SS) 先修改指针:

    27、 SP SP-2 后压入: (SP+1,SP) SRC(SP) 弹出:格式 POP DST栈顶 先弹出:DST (SP+1,SP)压 弹 后修改指针:SP SP+2入 出高地址 栈底,(3)XCHG指令(交换指令),格式:XCHG OPR1, OPR2 操作:OPTR1 OPTR2 标志:O D I T S Z A P C - - - - - - - - - 例:XCHG AL , BL XCHG BX,CXXCHG DS:2530H, CX,XCHG指令允许的操作数及数据传送方向,存储器,直接寻址 寄存器间接寻址 寄存器相对寻址 基址变址寻址 基址变址相对寻址,通用寄存器,AX BX CX

    28、DX SI DI SP BP AL BL CL DL AH BH CH DH,练习,用XCHG指令改进前面的数据块交换程序:,MOV BL , SI +09HXCHG BL , DI+09HMOV SI+09H , BL MOV BL,SI+09H MOV AL,DI+09H MOV SI+09H,AL MOV DI+09H,BL ,2. 专用传送指令,专用传送指令有15条,可分为标志传送、查表、地址传送、符号扩展、输入/输出和串传送类共六种,它们的名称、书写格式、完成的操作及操作类型如下表所示。,专用传送指令 (1),专用传送指令 (2) 续表,专用传送指令 (3) 续表,专用传送指令 (4

    29、) 续表,(1)标志传送指令,标志传送指令共4条:PUSHFPOPFLAHF ;AH Flag的低8位SAHF ;Flag的低8位 AH例:将8086 标志寄存器的TF位置 “1”,(2)查表指令,查表指令XLAT将以BX+AL为偏移地址的内存单元中的一个字节送到AL中。在使用XLAT指令前,应先在内存中建立一个字节数据表,表的首字节的偏移地址要事先存入BX,表中待查的数据相对于表开始处的位移量也要事先存入AL。指令执行时,会将BX的内容与AL的内容相加,用得到的数作为偏移地址,以DS为段地址,将该地址处存储单元中的内容(字节)取到AL中。,例如,如果B为数据段中一组字节变量的开始地址,则执行

    30、下列程序段后,AL=66H。B DB 3FH, 06H, 5BH, 4FH, 66H ;数据段中的数据表DB 6DH, 7DH, 07H, 7FH, 6FHMOV BX,OFFSET B ;使BX中存放数据表首字节的偏移地址MOV AL,4 ;使AL中存放欲查单元的地址位移量4XLAT ;查表得到的内容(字节)在AL中在此例中,数据表中存放的数据恰好是共阳极数码管的输入信号,所以,只要事先在AL中放好一个十进制数码(09),就能通过上述程序段得到数码管的相应输入信号。,(3) 地址传送指令,地址传送指令有LEA、LDS和LES共3条:LEA (Load Effective Address)LD

    31、S (Load pointer into register and DS)LES (Load pointer into register and ES),(i)取有效地址指令,格式:LEA REG , SRC 操作:REG SRC 的有效地址 *指令功能:将源操作数的有效地址EA传送到目的操作数,目的操作数为一个16位的通用寄存器。,例:LEA BX , BX+DI+6H,若指令执行之前(BX)=1000H, (DI)=0200H, 则指令执行之后, (BX)=1206H注意与指令MOV BX,BX+DI+6H功能上的区别从变量的角度,“LEA AX,VAR”指令传送的是变量的地址,而“MOV

    32、 AX,VAR”指令传送的是变量的值。,练习如果TABLE为数据段中0032H单元的符号名,其中存放的内容为1234H, 当执行指令 “ MOV AX , TABLE”后,(AX)= ; 而执行指令 “ LEA AX , TABLE”后,(AX) = 。,(ii) LDS REG , SRC,操作:REG (SRC)DS (SRC+2)标志:- - - - - - - - -指令 功 能:将地址指针(共4个字节)装入DS和另一个非段寄存器。其中:前两个字节(偏移量) 非段寄存器后两个字节(段基址) DS,Example,例1. LDS DI , DS:2130H设(DS)=3000H32130

    33、HDIDS,(iii) LES REG , SRC,操作: REG (SRC)ES (SRC+2)* LDS和LES指令为切换数据段提供了方便。,(4) 符号扩展指令,符号扩展指令有CBW和CWD共两条。CBW指令将AL中的8位带符号数扩展为16位并送入AX中。 实际上就是将AL的最高位送入AH的所有各位。CWD指令将AX中的16位带符号数扩展为32位并送入DX和AX中(其中DX存放高16位,AX存放低16位)。 实际上就是将AX的最高位送入DX的所有各位。,CBW和CWD两条指令通常只对带符号数使用。CBW指令只能对AL的内容进行扩展,扩展后AL的内容不变但占用AH;CWD指令只能对AX的内

    34、容进行扩展,扩展后AX的内容不变但占用DX。,例如: 若AX=379AH, 则执行完CBW指令后,AX=FF9AH,若执行的是CWD指令,则DX=0000H,AX=379A H;若AX=977AH, 则执行完指令CBW后,AX=007AH,若执行的是CWD指令,则DX=FFFFH,AX=977AH。,(5) 输入输出指令, 直接输入输出指令 格式:IN AL, PORT ;操作:AL (PORT)IN AX, PORT; AX (PORT+1,PORT)OUT PORT,AL; (PORT) ALOUT PORT,AX; (PORT+1,PORT) AX 注:PORT为输入输出端口号,范围为0

    35、255(00FFH),间接输入输出指令,格式:IN AL, DX; 操作:AL (DX)IN AX, DX; AX (DX+1,DX)OUT DX,AL; (DX) ALOUT DX,AX; (DX+1,DX) AX在间接输入输出指令之前,需将端口号 DX.MOV DX,XXXXH;,输入输出指令格式(机器码),输入指令:0:8位传送 只出现于直接输入1:16位传送 输出指令 0直接输入指令(长形)1间接输入指令 (短形),输出指令只出现于长形0 (长形)1(短形),输入输出指令的使用,IIN 指令:用于从数据端口输入数据或从状态端口输入状 态字.例: IN AL , 28H; LOP : I

    36、N AL, 27H;MOV DS:2000H ,AL; TEST AL,01H;JNZ LOP,OOUT指令:用于输出数据或命令给指定的I/O端口 例例1 MOV AL , SIOUT 80H , AL ;设80H为数据口的口地址例2 MOV DX , 280H;设280H为控制口的口地址MOV AL , 01HOUT DX , AL,(6) 串传送类指令,串传送类指令有MOVS、STOS 和 LODS共3条。 第一条指令:串传送指令(MOVS)串传送指令MOVS完成两个存储单元之间的传送,传送后会自动修改有关的变址寄存器。,“MOVSB”指令将源存储单元(DS:SI)的一个字节传送到目的存储

    37、单元(ES:DI)的一个字节中。 若DF=0,则传送后SISI+1,DIDI+1;若DF=1,则传送后SISI-1,DIDI-1。“MOVSW”指令将源存储单元(DS:SI)的一个字传送到目的存储单元(ES:DI)的一个字中。 若DF=0,则传送后SISI+2,DIDI+2;若 DF=1,则传送后SISI-2,DIDI-2。,串传送指令的应用例,将内存1000H地址开始的100个字节数据向高地址方向移动一个字节的位置。,参考答案,MOV AX , DSMOV ES , AX ;set up ES to same as DS MOV SI , 1063HMOV DI , 1064HMOV CX

    38、, 64HSTDREP MOVSBHLT 思考:向低地址方向移动两个字节位置。,第二条指令:串存储指令STOS(写串) 串存储指令STOS将累加器AL或AX的内容传送至目的存储单元(ES:DI)中。传送后自动修改DI寄存器的值。该指令前面加上重复前缀REP后,可以使一段内存单元中填满相同的值。,第三条指令:串装入指令LODS(读串) 串装入指令LODS将源存储单元( DS:SI)的内容传送至累加器AL或AX中。传送后会自动修改变址寄存器SI的内容。因为累加器在每次重复时都被重写,只有最后一个元素被保存下来,故这条指令前一般不加重复前缀,而常用在循环程序段中,和其他指令结合起来完成复杂的串操作功

    39、能。 ,二、运算类指令,二进制算术运算指令 BCD数运算指令 逻辑运算和移位指令,1. 算术运算指令,(1) 二进制加法和减法指令名称 格式 操作加法 ADD DST,SRC DST SRC+DST带进位加法 ADC DST,SRC DST SRC+DST+CF减法 SUB DST, SRC DST DSTSRC带借位减法 SBB DST,SRC DST DST-SRC-CF标志: O D I T S Z A P C 所有状态标志都受影响 ,Example 1,编写实现下列二进制运算的程序段W X+Y+24Z(X,Y,Z均为字变量)MOV AX, X ADD AX, Y ADD AX, 24

    40、SUB AX, Z MOV W, AX,Example 2,双倍精度运算(操作数的长度为双字两个16位)2000H 3000H低16位 低16位高16位 高16位把2000H地址开始的两个字(低字在前)和3000H地址开始的两个字相加,和存放在2000H开始处。,程序段,MOV SI , 2000H ;取第一个数的首地址 MOV AX, SI ; 将第一个数的低16位送AX MOV DI ,3000H ; 取第二个数的首地址 ADD AX, DI ; 第一个数的低16位和第2个数 的低16位 相加(不加CF,但此条指令的执行影响CF) MOV SI,AX ; 存低16位相加结果 MOV AX,

    41、 SI+2 ADC AX,DI+2 ;两个高16位连同CF(低16位相加形成的)相 加. MOV SI+2,AX ; 存高16位相加结果.,思考: 以上是双字(双倍精度)相加,如果更多字(多倍精度)相加,这个程序将如何设计?,例3:,假设数的长度(以字计)存放 于2500H字节单元,两个无符号二进制数分别 从2000H和3000H开始存放(低字在前),求两数之和并存放于2000H开始处,试编程实现。,参考答案,MOV CL , DS:2500H MOV SI , 2000H MOV DI , 3000H CLC ; 清CFLOOP1: MOV AX , SI ADC AX , DI MOV S

    42、I , AX INC SI INC SI INC DI INC DI DEC CL JNZ LOOP1 MOV AX , 0H ;ADC AX , 0H ; 处理最高位产生的进位MOV SI , AX ; HLT,(2) 加1 减1和比较指令,名称 格式 操作 加 1 INC OPR OPR OPR+1 减 1 DEC OPR OPR OPR-1 求补(Negate) NEG OPR OPR -OPR 比较 CMP OPR1,OPR2 OPR1-OPR2标志:INC和DEC: O D I T S Z A P C - - - -NEG和CMP: - - - ,NEG指令,NEG指令把操作数当成一

    43、个带符号数,如果原操作数是正数,NEG指令则将其变成负数(用补码表示);如果原操作数是负数(用补码表示),NEG指令则将其变成正数。 方法:“各位(包括符号位)求反,末位加1”.,Example,* 若AL=00010001B=+17,执行NEG AL后,AL=11101111B=17补* 若AL=11010001B=47补,执行NEG AL后,AL=00101111B=+47,比较指令,比较指令实际上是做减法,但不回送相减的结果,只是根据结果置标志。通常,把CMP指令安排在条件转移指令(如JZ , JG , JO 等)之前。例:如果X50,转移到TOO-HIGH; 如果带符号减法XY引起溢出,则转移到OVERFLOW; 否则,计算 X-Y ,并将结果存放在RESULT中。(其中,X、Y、RESULT均为字变量)。,程序段,下述程序段使用了前面介绍的几条指令,也用到了后面即将介绍的条件转移指令.MOV AX , X ;将(X)移入AXCMP AX , 50 ; 比较JG TOO-HIGH ; 如果(X)大于50,则转向 TOO-HIGHSUB AX, Y ; 否则减去(Y)JO OVERFLOW ;溢出则转移JNS NONNEG NEG AXNONNEG: MOV RESULT , AX ;无溢出,取绝对值,并将结果存 入RESULTTOO-HIGH: OVERFLOW: ,

    展开阅读全文
    提示  道客多多所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:第4章 寻址方式与指令系统.ppt
    链接地址:https://www.docduoduo.com/p-8306382.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    道客多多用户QQ群:832276834  微博官方号:道客多多官方   知乎号:道客多多

    Copyright© 2025 道客多多 docduoduo.com 网站版权所有世界地图

    经营许可证编号:粤ICP备2021046453号    营业执照商标

    1.png 2.png 3.png 4.png 5.png 6.png 7.png 8.png 9.png 10.png



    收起
    展开