第三章80X86指令系统和寻址方式_第1页
第三章80X86指令系统和寻址方式_第2页
第三章80X86指令系统和寻址方式_第3页
第三章80X86指令系统和寻址方式_第4页
第三章80X86指令系统和寻址方式_第5页
已阅读5页,还剩192页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第3章章 80 x86的指令系统和寻址方式的指令系统和寻址方式 3.180 x86的寻址方式的寻址方式 3.3 80 x86的指令系统的指令系统 3.4 80 x86的机器语言指令概况的机器语言指令概况基本概念指令系统每一种计算机都有一组指令集供用户使用,这组指令集称为该计算机的指令系统。指令集中的每条指令在汇编语言中都是用助记符来表示的。基本概念指令的构成w 指令由操作码和操作数两部分组成w 操作码说明计算机要执行哪种操作,如传送、运算、移位、跳转等操作,它是指令中不可缺少的组成部分w 操作数是指令执行的参与者,即各种操作的对象w 有些指令不需要操作数,通常的指令都有一个或两个操作数,也有

2、个别指令有3个甚至4个操作数操作码操作码操作数操作数基本概念8086指令的基本格式w 操作码 目的操作数,源操作数 ;注释DESTSRCw 内的内容可缺省w 书写注意事项: 操作码与操作数至少有一个空格或制表符分隔 操作数之间必须用“,”相分隔, DEST在前, SRC在后w 每种指令的操作码:n用一个唯一的助记符表示(指令功能的英文缩写)n对应着机器指令的一个二进制编码操作数类型操作数类型w按照指令处理的操作数存放位置分:按照指令处理的操作数存放位置分:n存储器类型:存储器类型:操作数存放在主存中,操作数存放在主存中,A为其地址信息为其地址信息n寄存器类型:寄存器类型:操作数存放在操作数存放

3、在CPU的通用寄存器中,的通用寄存器中,A为寄为寄存器号存器号n立即数类型:立即数类型:操作数存放在指令(地址字段)中操作数存放在指令(地址字段)中指令中的指令中的操作数操作数: 可以是一个具体的数值可以是一个具体的数值 可以是存放数据的寄存器可以是存放数据的寄存器 或指明数据在主存位置的存储器地址或指明数据在主存位置的存储器地址基本概念寻址方式w 在指令中为了取得操作数地址所使用的方式w 寻找操作数的过程就是操作数的寻址w 不同的指令系统都规定一些寻址方式供编程时选用w 指令的寻址方式主要由操作数的形式表示出来w 操作数采取哪一种寻址方式,会影响机器运行的速度和效率 3.1 80 x86的寻

4、址方式的寻址方式一、与数据有关的寻址方式一、与数据有关的寻址方式二、与转移地址有关的寻址方式二、与转移地址有关的寻址方式1.立即(数)寻址立即(数)寻址2.寄存器寻址寄存器寻址3.直接寻址直接寻址4.寄存器间接寻址寄存器间接寻址5.寄存器相对寻址寄存器相对寻址6.基址变址寻址基址变址寻址7.相对基址变址寻址相对基址变址寻址8.串操作寻址串操作寻址9.端口寻址端口寻址操作数操作数可以是一个具体的数值可以是一个具体的数值可以是存放数据的寄存器可以是存放数据的寄存器指明数据在主存位置的存储器地址指明数据在主存位置的存储器地址位移量:指令中给出位移量:指令中给出16位数(常数、符号)位数(常数、符号)

5、 EA 基地址:由基址寄存器基地址:由基址寄存器BX或基址指针或基址指针BP给出给出 变址:由变址寄存器(变址:由变址寄存器(SI或或DI)给出给出1.立即(数)寻址立即(数)寻址w 指令中的操作数直接存放在机器代码中,紧跟在操作码之后(操作数作为指令的一部分存放在操作码之后的主存单元中)w 这种操作数被称为立即数immn它可以是8位数值i8(00HFFH)n也可以是16位数值i16(0000HFFFFH)w 立即数寻址方式常用来给R/M赋值w 立即数只能用于源操作数立即数寻址指令MOV AL,05H ;AL05HMOV AX,0102H;AX0102H立即数寻址的功能立即数寻址的执行例例、

6、MOV AX, 3064HMOV AX, 3064H指令执行后,(指令执行后,(AXAX)= 3064H= 3064H 下图表示了它的执行情况,图中指令存放在代码段下图表示了它的执行情况,图中指令存放在代码段中,中,OPOP表示该指令的操作码部分,表示该指令的操作码部分,30643064H H为立即数,为立即数,它是指令的一个组成部分。它是指令的一个组成部分。 2. 寄存器寻址:寄存器寻址:它使用它使用CPU的内部寄存器来存放要处理来存放要处理的操作数,寄存器号由指令指定。的操作数,寄存器号由指令指定。 w 可以是:n8位寄存器:AH、AL、BH、BL、CH、CL、DH、DLn16位寄存器:A

7、X、BX、CX、DX、SI、DI、BP、SPn4个段寄存器seg:CS、DS、SS、ESMOV AX,1234H ;AX1234HMOV BX,AX;BXAX寄存器寻址的功能寄存器寻址的执行存储器操作数的寻址w 当操作数存放在内存中时,寻找操作数归结为当操作数存放在内存中时,寻找操作数归结为如何确定存储单元的地址如何确定存储单元的地址w 逻辑地址逻辑地址段基值:偏移量段基值:偏移量由段寄存器的内容给出由段寄存器的内容给出 主要确定该部分的内容主要确定该部分的内容(EA)w 物理地址物理地址=(段寄存器)(段寄存器) 16 + EA位移量:指令中给出位移量:指令中给出16位数(常数、符号)位数(

8、常数、符号) EA 基地址:由基址寄存器基地址:由基址寄存器BX或基址指针或基址指针BP给出给出 变址:由变址寄存器(变址:由变址寄存器(SI或或DI)给出给出 在实际寻址过程中,可能包含不同部分,在实际寻址过程中,可能包含不同部分,EA为它们的相加之和,可在为它们的相加之和,可在64KB范围内寻范围内寻址。构成址。构成EA的的3个分量的不同组合,形成了个分量的不同组合,形成了不同的寻址方式。不同的寻址方式。3. 直接寻址:直接寻址:w 有效地址在指令中直接给出有效地址在指令中直接给出操作数的操作数的16位偏移量直接包含在指令中,与操作码位偏移量直接包含在指令中,与操作码一起放在代码段中一起放

9、在代码段中w 用符号表示的位移量用符号表示的位移量MOV BX,VAR MOV BX,DS:VAR;表示将用符号表示将用符号VAR表示的字单元的内容表示的字单元的内容 AX;不声明段则默认为数据段,指明段寄存器则可实现;不声明段则默认为数据段,指明段寄存器则可实现段跨越段跨越w 用常数表示的位移量用常数表示的位移量MOV AX,DS:2000H;表示将数据段偏移表示将数据段偏移2000H字节的字单元的内容字节的字单元的内容 AX在这种寻址方式中,操作数存放在存储单元中,而这个在这种寻址方式中,操作数存放在存储单元中,而这个存储单元的有效地址就在指令的操作码之后,操作数的存储单元的有效地址就在指

10、令的操作码之后,操作数的物理地址可通过段基地址再加上这个有效地址形成。物理地址可通过段基地址再加上这个有效地址形成。直接寻址的功能MOV AX,DS:2000H直接寻址的执行MOV AX,DS:2000H 例:例:MOV AX, 2000H MOV AX, 2000H EA=2000H, EA=2000H, 假设假设( (DS)=3000H, DS)=3000H, 那么那么PA=32000HPA=32000H 5030AH AL50(AX)= 3050 H3200030例如:例如: MOV AX, DATA或或 MOV AX, DATA这里这里DATA是存放操作数单元的符号地址。是存放操作数单

11、元的符号地址。 直接寻址方式默认操作数在数据段中,如果操作数直接寻址方式默认操作数在数据段中,如果操作数定义在其它段中,则应在指令中指定段跨越前缀。定义在其它段中,则应在指令中指定段跨越前缀。 例如:例如: MOV AX, ES:NUMBER或或 MOV AX, ES:NUMBER这里这里NUMBER是附加段中的字变量。是附加段中的字变量。 (2)所使用的寄存器相当于地址指针,当修改其内容所使用的寄存器相当于地址指针,当修改其内容后可指向不同的存储单元后可指向不同的存储单元(3)书写时用书写时用括住寄存器名,以区别于寄存器寻址括住寄存器名,以区别于寄存器寻址.4. 寄存器间接寻址:寄存器间接寻

12、址:寄存器间接寻址得到的操作数存放在内存储器中,而操寄存器间接寻址得到的操作数存放在内存储器中,而操作数的偏移地址作数的偏移地址EA在指令指明的寄存器中,即寄存器的在指令指明的寄存器中,即寄存器的内容为操作数的偏移地址内容为操作数的偏移地址EA。(1)(1)操作数的偏移地址包含在变址寄存器(操作数的偏移地址包含在变址寄存器(DI或或SI)、)、基址寄基址寄存器(存器(BX或或BP)之一中之一中; ;当以当以SI、DI、BX间接寻址,间接寻址,操作数默认在数据段,操作数默认在数据段,操作数物理操作数物理地址由数据段寄存器地址由数据段寄存器DS与与SI或或DI或或BX中的偏移地址构成;中的偏移地址

13、构成;当以当以BP间接寻址,间接寻址,操作数默认在堆栈段操作数默认在堆栈段,操作数物理地址由堆,操作数物理地址由堆栈段寄存器栈段寄存器SS与与BP中的偏移地址构成。中的偏移地址构成。使用段超越前缀改变段。使用段超越前缀改变段。即:即:若用寄存器若用寄存器SI,DI,BX间接寻址,则操作数在当前数据段中。间接寻址,则操作数在当前数据段中。 PA=(DS)10H+EA 若用寄存器若用寄存器BP间接寻址,则操作数在当前堆栈段中。间接寻址,则操作数在当前堆栈段中。 PA=(SS)10H+EA 寄存器间接寻址的功能寄存器间接寻址的执行例:例:MOV AX, BX PA = 16d (DS) + (BX)

14、MOV AX, ES:BX PA = 16d (ES) + (BX)MOV AX, BP PA = 16d (SS) + (BP)* 不允许使用不允许使用AX、CX、DX 存放存放 EA 5.寄存器相对寻址方式寄存器相对寻址方式w 直接变址寻址,基址寻址,变址寻址直接变址寻址,基址寻址,变址寻址w 有效地址是寄存器内容与有符号有效地址是寄存器内容与有符号8位或位或16位位移位位移量之和,寄存器可以是量之和,寄存器可以是BX、BP或或SI、DIEA BX/BP 或或 SI/DI 0/8/16位位移量位位移量w 段地址对应段地址对应BX/SI/DI寄存器默认是寄存器默认是DS,对应对应BP寄存器默

15、认是寄存器默认是SS;可用段超越前缀改变可用段超越前缀改变w 该方式不仅可以修改指针,还可以修改位移量,该方式不仅可以修改指针,还可以修改位移量,对数组操作十分方便对数组操作十分方便基址寻址基址寻址变址寻址变址寻址基址寻址:基址寻址:偏移地址是指令中给定的偏移量和寄存器偏移地址是指令中给定的偏移量和寄存器BXBX或基数指针或基数指针BPBP的内容之和;的内容之和;BXBX作为基址寄存器时且无作为基址寄存器时且无段超越时,物理地址由段超越时,物理地址由DSDS和偏移地址形成;和偏移地址形成;BPBP作为基址作为基址寄存器时且无段超越时,物理地址由寄存器时且无段超越时,物理地址由SSSS和偏移地址

16、形成。和偏移地址形成。 例如:例如:MOV BXMOV BX,DELTABP DELTABP 变址寻址:变址寻址:操作数的偏移地址为指令中给定的操作数的偏移地址为指令中给定的8 8位或位或1616位偏移量和变址寄存器位偏移量和变址寄存器SISI或或DIDI内容之和;操作数的物理内容之和;操作数的物理地址由地址由DSDS和偏移地址形成。若指明是段超越的,则以指和偏移地址形成。若指明是段超越的,则以指令中指定的段寄存器为基准。令中指定的段寄存器为基准。 例如:例如:MOV AXMOV AX,COUNTDI COUNTDI 5.寄存器相对寻址方式寄存器相对寻址方式MOV AX,10HSI MOV A

17、X,DS:10HSIMOV AX,ARRAYBX MOV AX,DS:ARRAYBXMOV TABLEDI,AL MOV DS:TABLEDI,ALMOV TABZBP,BL MOV SS:TABZBP,BL 寄存器相对寻址的功能寄存器相对寻址的执行代码段DS数据段操作码24H00H12H34H56H78H9AHMOV AL,0024HSI0024H(SI)=0(AL)=12H(SI)=1(AL)=34H(SI)=2(AL)=56H(SI)=3(AL)=78H(SI)=4(AL)=9AHEA=24H+(SI)(SI)可看作数据起始单元可看作数据起始单元的偏移量的偏移量数组内某元素距数组数组内某

18、元素距数组起始单元的偏移起始单元的偏移通过修改通过修改SI可遍历整个数组可遍历整个数组6.基址变址寻址方式:基址变址寻址方式:操作数的偏移地址为基址寄存器操作数的偏移地址为基址寄存器BXBX或或BPBP的内容加上变址的内容加上变址寄存器寄存器SISI或或DIDI的内容之和;的内容之和;若用若用BX作为基址寄存器,则操作数在数据段中;若用作为基址寄存器,则操作数在数据段中;若用BP作为基址寄存器,则操作数在堆栈段中。作为基址寄存器,则操作数在堆栈段中。 w 有效地址由基址寄存器(有效地址由基址寄存器(BX或或BP)的内容加上的内容加上变址寄存器(变址寄存器(SI或或DI)的内容构成:的内容构成:

19、w 段地址对应段地址对应BX基址寄存器默认是基址寄存器默认是DS,对应对应BP基址寄存器默认是基址寄存器默认是SS;可用段超越前缀改变可用段超越前缀改变6.基址变址寻址方式基址变址寻址方式MOV AX,BXSI MOV AX,DS:BX+SIMOV AX,BPDI MOV AX,SS:BP+DIMOV AX,DS:BPDI MOV AX, DS:BP+DI基址变址寻址的功能请请指指出出图图中中的的错错误误!基址变址寻址的执行例、例、MOV AX, BXDI (或写为或写为 MOV AX, BX+DI)设设 (DS ) = 2100H,(,(BX)= 0158H,(,(DI)= 10A5H则则

20、EA = 0158H +10A5H = 11FDH物理地址物理地址 = 21000H +11FDH = 221FDH指令执行情况如下图所示,最后的执行结果是(指令执行情况如下图所示,最后的执行结果是(AX)= 1234H。 7.相对基址变址寻址方式:相对基址变址寻址方式:w 有效地址是基址寄存器(有效地址是基址寄存器(BX/BP)、)、变址寄存变址寄存器(器(SI/DI)与一个与一个8位或位或16位位移量之和:位位移量之和:EABX/BPSI/DI8/16位位移量位位移量w 该方式中,该方式中,BX/BP选一,选一,SI/DI选一选一w 段地址对应段地址对应BX基址寄存器默认是基址寄存器默认是

21、DS,对应对应BP基址寄存器默认是基址寄存器默认是SS;可用段超越前缀改变可用段超越前缀改变7.相对基址变址寻址方式相对基址变址寻址方式MOV AX, 06HBX+SI MOV AX, DS:BX+SI+06HMOV AL,TABBXDI MOV AL,DS:TABLEBXDI MOV DWORDBPSI,DX MOV SS:DWORDBPSI,DX MOV AX,ARRAYBXBP MOV AX,DASIDI 31A003000:1A00例如:例如:MOV AXMOV AX,MASKBXSI MASKBXSI BX、SI分别存放数组的脚标MOV AL,ARRAYBXSIDS数据段ARRAYS

22、IBX二维数组起始单元二维数组起始单元 EA 之间表示相加的关系之间表示相加的关系BXSI BX+SI二、与转移地址有关的寻址方式二、与转移地址有关的寻址方式 程序代码亦存放在存储器中,如程序代码亦存放在存储器中,如何控制程序的走向(转移位置的地何控制程序的走向(转移位置的地址址CS:IP)是本部分所涉及的内容,是本部分所涉及的内容,由于它们与具体的指令相关,他们由于它们与具体的指令相关,他们的介绍放在指令中讲解。的介绍放在指令中讲解。 3.3 80 x86的指令系统的指令系统w 指令分类指令分类n功能功能n格式格式w 数据传送指令数据传送指令w 算术运算指令算术运算指令w 逻辑指令逻辑指令w

23、 串操作指令串操作指令w 程序转移指令程序转移指令w 处理器控制指令处理器控制指令w 双操作数指令(双操作数指令(DEST,SRC)w 单操作数指令(单操作数指令(DEST)w 无操作数指令(隐含,按约定寻找操作数)无操作数指令(隐含,按约定寻找操作数)一、数据传送指令w 数据传送是计算机中最基本、最重要的一数据传送是计算机中最基本、最重要的一种操作种操作w 传送指令也是最常使用的一类指令传送指令也是最常使用的一类指令w 传送指令把数据从一个位置传送到另一个传送指令把数据从一个位置传送到另一个位置位置w 除标志寄存器传送指令外,均除标志寄存器传送指令外,均不影响标志不影响标志位位w 重点掌握重

24、点掌握MOV XCHG XLAT PUSH POP LEA1. 通用数据传送指令w提供方便灵活的通用传送操作w有3条指令MOVXCHGXLAT1)传送指令传送指令MOV(move)w 格式:MOV DEST,SRCw 功能:将源操作数的内容传送至目的操作数中即(DEST) (SRC)w 说明:nDEST可以是8/16位的R(CS、IP除外)/MnSRC可以是8/16位的R/M/立即数只能出现在源操只能出现在源操作数的位置作数的位置1)传送指令传送指令MOV立即数传送立即数传送MOV MOV reg/mem,immreg/mem,imm;立即数送寄存器或主存立即数送寄存器或主存movmov al

25、,4 al,4;(;(alal)44,字节传送字节传送movmov cx,0ffh cx,0ffh;(;(cxcx)00ffh00ffh,字传字传送送movmov si,200h si,200h;(;(sisi)0200h0200h,字传字传送送movmov byte byte ptrptr si,0ah si,0ah;byte byte ptrptr 说明是字节操作说明是字节操作movmov word word ptrptr si+2,0bh si+2,0bh;word word ptrptr 说明是字操作说明是字操作 注意立即数是字节量还是字量注意立即数是字节量还是字量 明确指令是字节操作

26、还是字操作明确指令是字节操作还是字操作1)传送指令传送指令MOV寄存器之间数据传送寄存器之间数据传送MOV MOV reg,regreg,regmovmov ax,bxax,bx;(ax) (ax) (bxbx) ) ,字传送字传送movmov ah,al ah,al;(ah) (al) (ah) (al) ,字节传送字节传送movmov ds,axds,ax;( (dsds) (ax) ) (ax) ,字传送字传送 CS只能出现在只能出现在SRC的位置的位置1)传送指令传送指令MOV寄存器与存储器之间数据传送寄存器与存储器之间数据传送MOV AL,D_BYTEMOV AL,D_BYTEMOV

27、 DX,BPMOV DX,BP;DXSS:BPDXSS:BPMOV DL,SIMOV DL,SI;DLDS:SIDLDS:SI1)传送指令传送指令MOV使用该指令应注意的问题使用该指令应注意的问题w SRC与与DEST的长度必须一致的长度必须一致 错误示例:错误示例:MOV AX,BLMOV CL,3824Hw DEST不能为不能为CS、IP及立即数及立即数 错误示例:错误示例: MOV VAR1,VAR2 正确实现:正确实现: MOV AL,VAR2MOV VAR1,ALw SRC与与DEST不能同时为存储器操作数不能同时为存储器操作数8086不支持两个存储单元间数据的直接传送不支持两个存储

28、单元间数据的直接传送w SRC与与DEST不能同时为段寄存器不能同时为段寄存器 例:例:DS ES 错误:错误:MOV DS,ES正确实现:正确实现:MOV AX,ESMOV DS,AXw 不能将立即数直接传送到段寄存器不能将立即数直接传送到段寄存器例:例:MOV AX,ESMOV DS,AX1)传送指令传送指令MOV数据传送方向示意数据传送方向示意立即数立即数 段寄存器段寄存器CSCS DS ES SS DS ES SS通用寄存器通用寄存器AX BX CX DXAX BX CX DXBP SP SI DIBP SP SI DI存存储储器器2)交换指令交换指令XCHG(exchange)w 指

29、令格式:指令格式:XCHG DEST,SRCw 指令功能:指令功能: (DEST) (SRC)n寄存器与寄存器之间对换数据寄存器与寄存器之间对换数据n寄存器与存储器之间对换数据寄存器与存储器之间对换数据注意:注意:不能在存储器与存储器之不能在存储器与存储器之间对换数据间对换数据2)交换指令交换指令XCHG寄存器间交换寄存器间交换movmov ax,1234h ax,1234h;ax=1234hax=1234hmovmov bx,5678h bx,5678h;bxbx=5678h=5678hxchgxchg ax,bxax,bx;ax=5678hax=5678h,bx=1234hbx=1234h

30、xchgxchg ah,al ah,al;ax=7856hax=7856h2)交换指令交换指令XCHG寄存器与存储器交换寄存器与存储器交换xchgxchg ax,ds:2000h ax,ds:2000h;字交换字交换;等同于;等同于 xchgxchg ds:2000h,ax ds:2000h,axxchgxchg al, ds:2000h al, ds:2000h ;字节交换字节交换;等同于;等同于 xchgxchg ds:2000h,al ds:2000h,al2)交换指令交换指令XCHG例题分析例题分析w 例例: (BX)=6F30H, (BP)=0200H, (SI)=0046H, (S

31、S)=2F00H,(2F246H)=4154H,在指令在指令 XCHG BX,BP+SI执行后,相关寄存器和执行后,相关寄存器和存储器的内容是什么?存储器的内容是什么?w 分析:源操作数的物理地址分析:源操作数的物理地址=(SS) 16+(BP)+(SI)=2F000H+0200H+0046H=2F246Hw 指令的功能:指令的功能:(BX) (2F246H)w 指令执行结果:指令执行结果:(BX)=4154H,(2F246H)=6F30H3)换码指令换码指令XLAT(translate)w 指令格式:指令格式: XLATw 指令功能指令功能: ALDS:BX+ALDS:BX+AL,将将BX指

32、定的缓指定的缓冲区中、冲区中、AL指定的位移处的一个字节数据取出指定的位移处的一个字节数据取出赋给赋给ALw 换码指令执行前:换码指令执行前:在主存建立一个字节量表格,内含要转换成的目的代码在主存建立一个字节量表格,内含要转换成的目的代码表格首地址存放于表格首地址存放于BXBX,ALAL存放相对表格首地址的位移量存放相对表格首地址的位移量w 换码指令执行后:换码指令执行后:将将ALAL寄存器的内容转换为目标代码寄存器的内容转换为目标代码movmov bx,100h bx,100hmovmov al,03h al,03hxlatxlat(BX)(AL)DS数据段12H34H56H78H9AH78

33、H(AL)=78H3)换码指令换码指令XLAT例题例题2.堆栈操作指令堆栈操作指令进栈指令PUSHw 格式:格式: PUSH SRCw 功能:功能:SPSPSPSP2 2,SS:SPSS:SP(r16/m16/segr16/m16/seg)例:例:push axpush axpush DS:2000hpush DS:2000h2.堆栈操作指令堆栈操作指令出栈指令POPw 格式:格式:POP DESTw 功能:功能: (r16/m16/segr16/m16/seg) SS:SP SS:SP SPSP+2SPSP+2,例:例:pop DXpop DXpop DS:2000hpop DS:2000h

34、2.堆栈操作指令堆栈操作指令应用举例应用举例push axpush ax;进入子程序后进入子程序后push push bxbxpush push dsds.pop pop dsds;返回主程序前返回主程序前pop pop bxbxpop axpop ax3. 地址传送指令地址传送指令w地址传送指令将存储器单元的逻辑地地址传送指令将存储器单元的逻辑地址送至指定的寄存器址送至指定的寄存器n有效地址传送指令有效地址传送指令 LEAn指针传送指令指针传送指令 LDS和和LESw注意不是获取存储器单元的内容注意不是获取存储器单元的内容3. 地址传送指令地址传送指令有效地址传送指令有效地址传送指令LEA(

35、load EA)格式:格式:LEA DEST,SRCLEA DEST,SRC1616位寄存器位寄存器存储器操作数存储器操作数功能:功能:DESTDESTSRCSRC的有效地址的有效地址EAEA将存储器操作数的有效地址传送至指定的将存储器操作数的有效地址传送至指定的16位寄存器中位寄存器中LEA BX,BUFRLEA BX,BUFR9A78H(BX)=9A78H3. 地址传送指令地址传送指令有效地址传送指令有效地址传送指令LEA(例)例)23H093A0HBUFR78H9AH093AHDS093C3H(BX)=0023H错误!错误! 获得主存单元的有效地址;不是获得主存单元的有效地址;不是物理地

36、址,也不是该单元的内容物理地址,也不是该单元的内容 可以实现计算功能可以实现计算功能3. 地址传送指令地址传送指令地址地址指针指针w 存储单元的逻辑地址存储单元的逻辑地址段基值(段基值(16位)位)段内偏移量(段内偏移量(16位)位)w 地址指针(地址指针(32位)位)M的逻辑地址在的逻辑地址在M中需中需4个连续的存储单元个连续的存储单元段基值段基值AD_POINTXXXX偏移量偏移量XXXX3. 地址传送指令地址传送指令指针传送指令指针传送指令格式:格式:LDS DEST,SRCLDS DEST,SRC功能:功能: ( (DEST)(SRCDEST)(SRC) )段内偏移量段内偏移量 DS

37、(SRC+2 )DS (SRC+2 )段基值段基值w LDSLDS指令将主存中指令将主存中SRCSRC 指定的字送至指定的字送至1616位寄存位寄存器器DESTDEST,并将,并将SRCSRC的下的下一字送一字送DSDS寄存器寄存器格式:格式:LES DEST,SRCLES DEST,SRC功能:功能: ( (DEST)(SRCDEST)(SRC) )段内偏移量段内偏移量 ES (SRC+2 )ES (SRC+2 )段基值段基值w LESLES指令将主存中指令将主存中SRCSRC 指定的字送至指定的字送至1616位寄存位寄存器器DESTDEST,并将,并将SRCSRC的下的下一字送一字送ESE

38、S寄存器寄存器w 例例: (DS)=B000H, (BX)=080AH, (0B080AH)=05AEH, (0B080CH)=4000H, (405AEH)=9634H,在在执行指令执行指令LDS DI,BXMOV AX,DI后,后,(AX)=?BX=080AHB0000H0B080AH40000H34H96HAEH05H00H40H405AEH05AEH0B080CH( (DI)=05AEHDI)=05AEH( (DS)=4000HDS)=4000Hw 结果结果: (DS)=4000H (DI)=05AEH (AX)=9634H例、设执行前例、设执行前( (DS)=2000H,(DI)=1

39、050H,COUNT=100H,DS)=2000H,(DI)=1050H,COUNT=100H,执行执行LDS SI,COUNTDILDS SI,COUNTDI 4. 标志寄存器传送指令标志寄存器传送指令w标志寄存器传送指令用来传送标志寄标志寄存器传送指令用来传送标志寄存器存器FLAGS的内容,方便进行对各的内容,方便进行对各个标志位的直接操作个标志位的直接操作w有有2对对4条指令条指令n低低8位传送:位传送:LAHF和和SAHFn16位传送:位传送:PUSHF和和POPF4、标志寄存器传送指令、标志寄存器传送指令标志低字节进出标志低字节进出AH指令指令格式:格式:LAHFLAHF功能:功能:

40、( (AH)FLAGSAH)FLAGS的低字节的低字节w LAHFLAHF指令将标志寄存器的指令将标志寄存器的低字节送寄存器低字节送寄存器AHAHw SF/ZF/AF/PF/CFSF/ZF/AF/PF/CF状态标志状态标志位分别送入位分别送入AHAH的第的第7/6/4/2/07/6/4/2/0位,而位,而AHAH的第的第5/3/15/3/1位任意位任意格式:格式: SAHF SAHF功能:功能: FLAGS FLAGS的的低字节低字节(AH)AH)w SAHFSAHF将将AHAH寄存器内容送寄存器内容送FLAGSFLAGS的低字节的低字节w 用用AHAH的第的第7/6/4/2/07/6/4/2

41、/0位相应位相应设置设置SF/ZF/AF/ PF/CFSF/ZF/AF/ PF/CF标志标志4.标志寄存器传送指令标志寄存器传送指令标志寄存器进出堆栈指令标志寄存器进出堆栈指令格式:格式:PUSHFPUSHF功能:功能:SPSP-2 SPSP-2 SS:SPFLAGSSS:SPFLAGSw PUSHFPUSHF指令将标志指令将标志寄存器的内容压入寄存器的内容压入堆栈,同时栈顶指堆栈,同时栈顶指针针SPSP减减2 2格式:格式: POPF POPF功能:功能:FLAGSSS:SP FLAGSSS:SP SPSPSPSP2 2w POPFPOPF指令将栈顶字单指令将栈顶字单元内容送标志寄存器,元内

42、容送标志寄存器,同时栈顶指针同时栈顶指针SPSP加加2 2 4.标志寄存器传送指令标志寄存器传送指令 标志寄存器进出堆栈指令(标志寄存器进出堆栈指令(置位单步标志)置位单步标志)pushfpushf;保存全部标志到堆栈保存全部标志到堆栈pop axpop ax;从堆栈中取出全部标志从堆栈中取出全部标志or ax,0100hor ax,0100h;设置设置D D8 8=TF=1=TF=1,axax其它位不变其它位不变push axpush ax;将将axax压入堆栈压入堆栈popfpopf;FLAGSAXFLAGSAX;将堆栈内容取到标志寄存器将堆栈内容取到标志寄存器二、算术运算指令二、算术运算

43、指令(部分)w四则运算是计算机经常进行的一种操四则运算是计算机经常进行的一种操作。算术运算指令实现二进制(和十作。算术运算指令实现二进制(和十进制)数据的四则运算进制)数据的四则运算w请注意算术运算类指令对标志的影响请注意算术运算类指令对标志的影响1.加加/减法指令减法指令w 格式:格式:ADD DEST,SRCSUB DEST,SRCw 功能:功能:(DEST) (DEST)+/-(SRC)w 受影响标志:受影响标志:CF,PF,AF,ZF,SF,OFw 说明:说明:n操作数可以是字节或字操作数可以是字节或字nSRC可以是通用可以是通用R、M、immnDEST可以是通用可以是通用R、MnDE

44、ST和和 SRC不能同时为不能同时为M进位标志进位标志 奇偶标志奇偶标志 辅助进位标志辅助进位标志 零标志零标志 符号标志符号标志 溢出标志溢出标志 CF:当结果的最高位产生进位时当结果的最高位产生进位时, ,CF=1,CF=1,否则否则CF=0CF=0。OFOF:当带符号数运算的结果超出其所能表示范围当带符号数运算的结果超出其所能表示范围, , 则则 OF=1,OF=1,否则否则OF=0OF=0。PFPF:结果中含结果中含11的个数为偶数的个数为偶数, ,则则PF=1,PF=1,否则否则PF=0PF=0。 SFSF:结果最高位为结果最高位为1,1,则则SF=1,SF=1,否则否则SF=0SF

45、=0。 ZFZF:结果为零结果为零, ,则则ZF=1,ZF=1,否则否则ZF=0ZF=0。AFAF:字节运算时字节运算时D3D3产生进位产生进位; ;字运算时字运算时D7D7产生进产生进位位, , 则则AF=1,AF=1,否则否则AF=0AF=0。 1.加法指令加法指令举例举例ADD AX,BXADD AL,BLSUB CX,20HADD DL,DA_BYTESUB DA_WORD,DX若若(AL)=0E5H,执行执行ADD AL,0A4H 后,后,AL及各标志位的情及各标志位的情况?况?11110 01011010 01001000 1001+CF=1,AF=0,PF=0,ZF=0,SF=1

46、,OF=0w若认为是无符号数,若认为是无符号数,则为则为229+164=393=256+137229+164=393=256+137w若认为是有符号数,若认为是有符号数,则为则为(-27)+(-92)=-119(-27)+(-92)=-119例:例:ADD AX,2520HADD AX,2520H 2. 减法指令减法指令举例举例w 例:执行指令例:执行指令MOV AL,-73SUB AL,-87后,后,AL及个标志位及个标志位的情况的情况1011 01111010 10010000 1110CF=0,AF=1,PF=0,ZF=0,SF=0,OF=0-73的补码表示的补码表示14-87的补码表示

47、的补码表示AL=0EH2.带进带进/借位的加借位的加/减法指令减法指令w 格式:格式:ADC DEST,SRCSBB DEST,SRCw 功能:功能:(DEST) (DEST)+/-(SRC)+/-CFw 受影响标志:受影响标志:CF,PF,AF,ZF,SF,OFw 说明:说明:n操作数可以是字节或字操作数可以是字节或字nSRC可以是通用可以是通用R、M、immnDEST可以是通用可以是通用R、MnDEST和和 SRC不能同时为不能同时为M2.带进带进/借位的加借位的加/减法指令减法指令举例举例w 例:实现例:实现2F365H和和5E024H的加法的加法运算运算MOV DX,2MOV AX,0

48、F365HADD AX,0E024HADC DX,52 F3655 E0248 D389+手工计算手工计算2 F3655 E0248 D389+1F365E024D389+CF=1,AF=0,PF=0,ZF=0,SF=1,OF=0000200050008+ 0001CF=0,AF=0,PF=0,ZF=0,SF=0,OF=0AXDXAXAX 3 3A 79A 79例:设在内存例:设在内存BUFFER1,BUFFER2BUFFER1,BUFFER2开始的两个存区中分别存有两开始的两个存区中分别存有两个四字节数个四字节数( (如下图如下图), ), 现求这两个数之和现求这两个数之和, ,并并 把它们

49、的结果存入以把它们的结果存入以BUFFER3BUFFER3为首址的存区中为首址的存区中解:完成本任务的程序段如左下所示,该程序的逐条执行过程可解:完成本任务的程序段如左下所示,该程序的逐条执行过程可见下图演示见下图演示 AXAX 9090 F0 F0AXAX 3535 12 12AXAX 4040 63 633.加加/减减1指令指令w 格式:格式:INC DESTDEC DESTw 功能:功能:(DEST) (DEST)+/-1w 将将DEST指定的寄存器或存储器内容加指定的寄存器或存储器内容加1或减或减1,然后送会寄存器或存储器然后送会寄存器或存储器 w 受影响标志:受影响标志:PF,AF,

50、ZF,SF,OF;但不影响但不影响CF w 说明:说明:nDEST可以是字节或字可以是字节或字R、Mn功能与功能与ADD/SUB相似,但占用字节少,且不影响标相似,但占用字节少,且不影响标志位志位CF 。常用于修改地址指针及循环计数器。常用于修改地址指针及循环计数器。例、设例、设X、Y、Z均为双精度数,他们分别存放在地址为均为双精度数,他们分别存放在地址为X,X+2;Y,Y+2;Z,Z+2的存储单元中,存放时高的存储单元中,存放时高位字在高地址中,低位字在低地址中;位字在高地址中,低位字在低地址中;W,W+2单元单元存放运算结果;编写实现下列二进制运算的程序段存放运算结果;编写实现下列二进制运

51、算的程序段 W X+Y+24Z MOV AX, X MOV DX,X+2 ADD AX, Y ADC DX,Y+2 ADD AX, 24 ADC DX,0 SUB AX, Z SBB DX,Z+2 MOV W, AX MOV W+2,DX4.求补指令(求负数)求补指令(求负数)w 格式:格式:NEG DESTw 功能:功能:(DEST) 0-0-(DEST)w 受影响标志:受影响标志: CF ,PF,AF,ZF,SF,OFw 说明:说明:nDEST可以是字节或字可以是字节或字R、Mn操作对象是有符号的数操作对象是有符号的数n当操作数取最小值(当操作数取最小值(-128或或-32768)时,执行

52、该指令)时,执行该指令后,操作数无变化,后,操作数无变化, OF=1n当操作数为当操作数为0时,结果为时,结果为0,但,但CF=0,其他情况其他情况CF=14.求补指令求补指令(举例)(举例)例:例:AL=13H,执行指令执行指令NEG AL后后AL的值的值10000 00000001 00111110 1101ALAL=-13H1001 00100000 00011001 0011+若若AL=11010001B=47补,补,执行执行NEG AL后,后, AL=00101111B=+475.比较指令比较指令CMP(compare)w 格式:格式:CMP DEST,SRCw 功能:功能:(DES

53、T) - -(SRC)w 受影响标志:受影响标志: CF ,PF,AF,ZF,SF,OFw 说明:说明:nDEST ,SRC可以是字节或字可以是字节或字R、M,长度必须一致长度必须一致nSRC还可以是还可以是immnDEST和和 SRC不能同时为不能同时为Mn该指令主要用于比较两数的关系该指令主要用于比较两数的关系5.比较指令比较指令CMP应用应用w ZF=1;两数相等两数相等w 两个无符号数比较两个无符号数比较CMP AX,BX ;0 AX BX1 AX SRCSF与与OF不同,不同,(DEST)SRC5.比较指令比较指令CMP(CMP AL,BL)AL=-2BL=1271111 11100

54、111 11110111 1111-SF=0OF=1相异,相异,ALBLAL=-2BL=-111111 11101111 11111111 1111-SF=1OF=0相异,相异,ALBLAL=127BL=-210111 11111111 11101000 0001-SF=1OF=1相同,相同,ALBL6.乘法指令乘法指令MUL r8/m8MUL r8/m8;无符号字节乘法无符号字节乘法;AXALAXALr8/m8r8/m8MUL r16/m16MUL r16/m16;无符号字乘法无符号字乘法;DX.AXAXDX.AXAXr16/m16r16/m16IMUL r8/m8IMUL r8/m8;有符

55、号字节乘法有符号字节乘法;AXALAXALr8/m8r8/m8IMUL r16/m16IMUL r16/m16;有符号字乘法有符号字乘法;DX.AXAXDX.AXAXr16/m16r16/m166.乘法指令乘法指令功能功能w 乘法指令乘法指令分无符号和有符号乘法指令分无符号和有符号乘法指令w 乘法指令的源操作数显式给出,乘法指令的源操作数显式给出,隐含使用隐含使用另一个操作数另一个操作数AX和和DXn字节相乘:字节相乘:AL与与r8/m8相乘,得到相乘,得到16位的结位的结果,存入果,存入AXn字相乘:字相乘:AX与与r16/m16相乘,得到相乘,得到32位的结位的结果,其高字存入果,其高字存

56、入DX,低字存入低字存入AXw 乘法指令利用乘法指令利用OF和和CF判断乘积的高一半判断乘积的高一半是否具有有效数值是否具有有效数值6.乘法指令乘法指令对标志的影响对标志的影响乘法指令如下影响乘法指令如下影响OF和和CF标志:标志:nMUL指令指令若乘积的高一半(若乘积的高一半(AH或或DX)为为0,则,则OF=CF=0;否则否则OF=CF=1nIMUL指令指令若乘积的高一半是低一若乘积的高一半是低一半的符号扩展,则半的符号扩展,则OF=CF=0;否则均否则均为为1例:设在字变量例:设在字变量A1,A2中分别存有两个中分别存有两个16位无符号二进位无符号二进制数,现在要求它们的积,并将积存入以

57、制数,现在要求它们的积,并将积存入以BUFFER为偏移为偏移地址的连续存区中。下面是完成此过程的程序段地址的连续存区中。下面是完成此过程的程序段: MOV AX,A1 MUL A2 MOV BUFFER,AX MOV BUFFER+2,DX 6.乘法指令乘法指令(例)(例)movmov al,0b4h al,0b4h;al=b4h=180al=b4h=180movmov bl,11h bl,11h;blbl=11h=17=11h=17mulmul blbl;ax=Obf4h=3060ax=Obf4h=3060,OF=CF=1OF=CF=1,AXAX高高8 8位不为位不为0 0movmov al

58、,0b4h al,0b4h;al=b4h=al=b4h=7676movmov bl,11h bl,11h;blbl=11h=17=11h=17imulimul blbl;ax=faf4h=ax=faf4h=12921292,OF=CF=1OF=CF=1,AXAX高高8 8位有效位有效6.除法指令除法指令DIV r8/m8DIV r8/m8;无符号字节除法无符号字节除法ALAXALAXr8/m8r8/m8的商,的商,AhAXAhAXr8/m8r8/m8的余数的余数DIV r16/m16DIV r16/m16;无符号字除法无符号字除法;AXDX.AXAXDX.AXr16/m16r16/m16的商,

59、的商,DXDX.AXDXDX.AXr16/m16r16/m16的余数的余数IDIV r8/m8IDIV r8/m8;有符号字节除法:有符号字节除法:ALAXALAXr8/m8r8/m8的商,的商,AhAXAhAXr8/m8r8/m8的余数的余数IDIV r16/m16IDIV r16/m16;有符号字除法:有符号字除法:;AXDX.AXAXDX.AXr16/m16r16/m16的商,的商,DXDX.AXDXDX.AXr16/m16r16/m16的余数的余数6.除法指令除法指令功能功能w 除法指令分无符号和有符号除法指令除法指令分无符号和有符号除法指令w 除法指令的除数显式给出,隐含使用另一除法

60、指令的除数显式给出,隐含使用另一个操作数个操作数AX和和DX作为被除数作为被除数n字节量除法:字节量除法:AX除以除以r8/m8,8位商存入位商存入AL,8位余数存入位余数存入AHn字量除法:字量除法:DX.AX除以除以r16/m16,16位商存入位商存入AX,16位余数存入位余数存入DXw 除法指令对标志没有影响除法指令对标志没有影响w 除法指令会产生结果溢出除法指令会产生结果溢出6.除法指令除法指令除法错中断除法错中断w 当被除数远大于除数时,所得的商就有可当被除数远大于除数时,所得的商就有可能超出它所能表达的范围。如果存放商的能超出它所能表达的范围。如果存放商的寄存器寄存器AL/AX不能

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论