80x86的指令系统和寻址方式课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《80x86的指令系统和寻址方式课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 80 x86 指令系统 寻址 方式 课件
- 资源描述:
-
1、第第3章章 80 x86的指令系统和寻址方式的指令系统和寻址方式 3.180 x86的寻址方式 3.2 80 x86的指令系统 3.3 80 x86的机器语言指令概况基本概念指令的构成w 指令由操作码和操作数两部分组成w 操作码说明计算机要执行哪种操作,如传送、运算、移位、跳转等操作,它是指令中不可缺少的组成部分w 操作数是指令执行的参与者,即各种操作的对象w 有些指令不需要操作数,通常的指令都有一个或两个操作数,也有个别指令有3个甚至4个操作数基本概念与数据有关的寻址方式w 在指令中为了取得操作数地址所使用的方式w 寻找操作数的过程就是操作数的寻址w 不同的指令系统都规定一些寻址方式供编程时
2、选用w 操作数采取哪一种寻址方式,会影响机器运行的速度和效率一个简单的汇编指令w 传送指令 格式:MOV DST,SRC 操作:(DST)(SRC)例:MOV AX,BX 执行指令前:(AX)=1234H,(BX)=4321H 执行指令后:(AX)=4321H,(BX)=4321H操作数的类型w 寄存器(R):字节、字、双字w 存储单元(M):字节、字、双字w 立即数(imm):字节、字、双字 3.1 80 x86的寻址方式的寻址方式一、与数据有关的寻址方式一、与数据有关的寻址方式二、与转移地址有关的寻址方式二、与转移地址有关的寻址方式1.立即(数)寻址2.寄存器寻址3.直接寻址4.寄存器间接
3、寻址5.寄存器相对寻址6.基址变址寻址7.相对基址变址寻址8.比例变址寻址方式9.基址比例变址寻址方式10.相对基址比例变址寻址方式1.立即(数)寻址w 操作数直接包含在指令中,紧跟在操作码之后的寻址方式,称为立即寻址方式,这种操作数被称为立即数(imm)n它可以是8位数值i8(00HFFH)n也可以是16位数值i16(0000HFFFFH)w 立即数寻址方式常用来给R/M赋值w 立即数只能用于源操作数立即寻址例3.1 MOV AL,9 ;(AL)=09H例3.2 MOV AX,3064H;(AX)=3064H 立即数寻址的执行2.寄存器寻址w 操作数存放在CPU的内部寄存器(reg)中,这些
4、寄存器可以是:n8位寄存器:AH、AL、BH、BL、CH、CL、DH、DLn16位寄存器:AX、BX、CX、DX、SI、DI、BP、SPn4个段寄存器seg:CS、DS、SS、ES寄存器寻址w MOV AX,BX ;如指令执行前(AX)=1234H,(BX)=5678H ;则指令执行后(AX)=5678H,(BX)保持不变。注意:注意:源寄存器和目的寄存器的位数必须一致。MOV AX,BL ()w 这里先引入有效地址EA(Effective Address)的概念:在8086里,把操作数的偏移地址称为有效地址,下面五种计算EA的方法体现了五种寻址方式。3、直接寻址方式(Direct addre
5、ssing)w 在这种寻址方式中,操作数存放在存储单元中,而这个存储单元的有效地址就在指令的操作码之后 直接寻址方式w MOV AX,2000H 如果(DS)=3000H,则执行情况如下图所示,最后的执行结果为(AX)=3050H。直接寻址方式w 跨越段前缀 MOV AX,2000h MOV AX,ES:2000hw 符号地址 MOV AX,VALUE MOV AX,VALUE MOV AX,ES:VALUE MOV AX,ES:VALUE4.寄存器间接寻址w 有效地址存放在基址寄存器BX,BP中或变址寄存器SI、DI中w 所使用的寄存器相当于地址指针,当修改其内容后可指向不同的存储单元w 书
6、写时用括住寄存器名,以区别于寄存器寻址w 若以BX、SI、DI间接寻址,操作数默认在数据段;若以BP间接寻址,操作数默认在堆栈段;寄存器间接寻址w MOV AX,BX 如果(DS)=2000H,(BX)=1000H,则物理地址=20000H+1000H=21000H执行情况如下图所示,最后的执行结果为(AX)=50A0H。寄存器间接寻址w使用跨越段前缀改变段 MOV AX,SI MOV AX,DS:SI MOV CL,BX MOV CL,DS:BX MOV BL,BP MOV BL,SS:BP MOV AX,ES:SI MOV CL,SS:BX MOV BL,DS:BP5.寄存器相对寻址方式w
7、 有效地址是寄存器内容与有符号8位或16位位移量之和,寄存器可以是BX、BP或SI、DIw 段地址对应BX/SI/DI寄存器默认是DS,对应BP寄存器默认是SS;可用段超越前缀改变w 该方式不仅可以修改指针,还可以修改位移量,对数组操作十分方便寄存器相对寻址方式w MOV AX,COUNTSI(也可表示为MOV AX,COUNT+SI)其中COUNT为16位位移量的符号地址。如果(DS)=3000H,(SI)=2000H,COUNT=3000H,则物理地址=30000H+2000H+3000H=35000H。寄存器相对寻址方式MOV AX,10HSI MOV AX,DS:10HSIMOV AX
8、,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)可看作数据起始单元可看作数据起始单元的偏移量的偏移量数组内某元素距数组数组内某元素距数组起始单元的偏移起始单元的偏移通过修改通过修改SI可遍历整个数组
9、可遍历整个数组6.基址变址寻址方式w 有效地址由基址寄存器(BX或BP)的内容加上变址寄存器(SI或DI)的内容构成:EABX/BPSI/DIw 段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS;可用跨越段前缀改变基址变址寻址方式w MOV AX,BXDI(或写为 MOV AX,BX+DI)如(DS)=2100H,(BX)=0158H,(DI)=10A5H则 EA=0158H+10A5H=11FDH物理地址=21000H+11FDH=221FDH基址变址寻址方式MOV AX,BXSI MOV AX,DS:BX+SIMOV AX,BPDI MOV AX,SS:BP+DIMOV A
10、X,DS:BPDI MOV AX,DS:BP+DI7.相对基址变址寻址方式w 有效地址是基址寄存器(BX/BP)、变址寄存器(SI/DI)与一个8位或16位位移量之和:EABX/BPSI/DI8/16位位移量w 该方式中,BX/BP选一,SI/DI选一w 段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS;可用跨越段前缀改变相对基址变址寻址方式w MOV AX,MASKBXSI(或 MOV AX,MASKBX+SI,或 MOV AX,MASK+BX+SI)如(DS)=3000H,(BX)=2000H,(SI)=1000H,MASK=0250H,则物理地址=30000H+2000H
11、+1000H+0250H=33250H最后的执行结果是(AX)=1234H。相对基址变址寻址方式MOV AX,06HBX+SI MOV AX,DS:BX+SI+06HMOV AL,TABBXDI MOVAL,DS:TABLEBXDI MOV TAB1BPSI,DXMOV SS:TAB1BPSI,DX MOV AX,ARRAYBXBP MOV AX,DASIDI BX、SI分别存放数组的脚标MOV AL,ARRAYBXSIDS数据段ARRAYSIBX二维数组起始单元二维数组起始单元 EA 之间表示相加的关系之间表示相加的关系BXSI BX+SI16位/32位寻址有效地址的组成四种成份四种成份16
12、位寻址位寻址32位寻址位寻址位移量0,8,16位0,8,32位基址寄存器BX,BP任何32位通用寄存器变址寄存器SI,DI除ESP以外的32位通用寄存器比例因子无1,2,4,88、比例变址寻址方式w 操作数的有效地址是变址寄存器的内容乘以指令中指定的比例因子再加上位移量之和 MOV EAX,COUNTESI*4 9、基址比例变址寻址方式w 操作数的有效地址是变址寄存器的内容乘以指令中指定的比例因子再加上基址寄存器的内容之和 MOV ECX,EAXEDX*810、相对基址比例变址寻址方式w 操作数的有效地址是变址寄存器的内容乘以指令中指定的比例因子再加上基址寄存器的内容和位移量之和 MOV EA
13、X,TABLEEBPEDI*4二、与转移地址有关的寻址方式 程序代码亦存放在存储器中,如程序代码亦存放在存储器中,如何控制程序的走向(转移位置的地何控制程序的走向(转移位置的地址址CS:IP)是本部分所涉及的内容,是本部分所涉及的内容,由于它们与具体的指令相关,他们由于它们与具体的指令相关,他们的介绍放在指令中讲解。的介绍放在指令中讲解。3.3 80 x86的指令系统的指令系统w 指令分类指令分类n功能功能n格式格式w 数据传送指令数据传送指令w 算术运算指令算术运算指令w 逻辑指令逻辑指令w 串操作指令串操作指令w 程序转移指令程序转移指令w 处理器控制指令处理器控制指令w 双操作数指令(双
14、操作数指令(DEST,SRC)w 单操作数指令(单操作数指令(DEST)w 无操作数指令(隐含,按约定寻找操作数)无操作数指令(隐含,按约定寻找操作数)一、数据传送指令w 数据传送是计算机中最基本、最重要的一种操作w 传送指令也是最常使用的一类指令w 传送指令把数据从一个位置传送到另一个位置w 除标志寄存器传送指令外,均不影响标志位1.通用数据传送指令w MOV(move)w MOVSX(move with sign-extend)w MOVZX(move with zero-extend)w PUSHw POPw PUSHA/PUSHAD(push all registers)w POPA/
15、POPAD(pop all registers)w XCHG(exchange)传送指令MOV(move)w 格式:MOVdst,src ;传送指令(move)执行操作:(dst)(src)功能:将源操作数(字节或字)传送到目的地址。w 注意:注意:目的操作数dst和源操作数src不能同时用存储器寻址方式,这个限制适用于所有指令;目的操作数dst不能是CS,也不能用立即数方式;目的操作数dst和源操作数src不允许同时为段寄存器;MOV指令不影响标志位。传送指令MOV数据传送方向示意立即数立即数 段寄存器段寄存器CSCS DS ES SS DS ES SS通用寄存器通用寄存器AX BX CX
16、DXAX BX CX DXBP SP SI DIBP SP SI DI存存储储器器传送指令MOV(move)MOV AL,5MOV AX,BXMOV BP,DSMOV DS,AXMOV BX,AXMOV ES:VAR,12MOV AL,BX MOV DS,1234H MOV CS,AX MOV DS,CS MOV VAR1,VAR2 MOV 12,AL MOVSX带符号扩展w 格式:MOVSX DST,SRC 执行操作:(DST)符号扩展(SRC)MOVSX reg1,reg2 MOVSX reg,mem注:源操作数可以8/16位的寄存器或存储单元,目标操作数则必须是16/32位寄存器。例:M
17、OVSX EAX,CL MOVSX EDX,EDIMOVZX带零扩展w 格式:MOVZX DST,SRC 操作(DST)零扩展(SRC)MOVSX reg1,reg2 MOVSX reg,mem例:MOVZX DX,AL MOVZX EAX,DATAPUSH进栈w 格式:PUSH SRC 操作:16位指令:(SP)(SP)2 (SP)+1,(SP)(SRC)32位指令:(ESP)(ESP)4 (ESP)+3,(ESP)+2,(ESP)+1,(ESP)(SRC)注:源操作数可为R/MPOP进栈w 格式:POP DST 操作:16位指令:(DST)(SP)+1,(SP)(SP)(SP)+2 32位
18、指令:(DST)(ESP)+3,(ESP)+2,(ESP)+1,(ESP)(ESP)(ESP)4注:源操作数可为R/M堆栈操作指令应用举例push ax;进入子程序后push bxpush ds.pop ds;返回主程序前pop bxpop axPUSHA/PUSHAD所有寄存器进栈w 格式:PUSHA PUSHAD 操作:所有16位通用寄存器依次进栈 所有32位通用寄存器依次进栈POPA/POPAD所有寄存器出栈w 格式:POPA POPAD 操作:16位通用寄存器依次出栈 32位通用寄存器依次出栈XCHG(exchange)交换指令w 格式:XCHG DST,SRCw 操作:(DST)(S
19、RC)n寄存器与寄存器之间对换数据n寄存器与存储器之间对换数据注意:注意:不能在存储器与存储器之不能在存储器与存储器之间对换数据间对换数据交换指令交换指令XCHG寄存器间交换寄存器间交换mov ax,1234h;ax=1234hmov bx,5678h;bx=5678hxchg ax,bx;ax=5678h,bx=1234hxchg ah,al;ax=7856hxchg ax,ds:2000h;字交换xchg al,ds:2000h;字节交换交换指令XCHG例题分析w 例例:(BX)=6F30H,(BP)=0200H,(SI)=0046H,(SS)=2F00H,(2F246H)=4154H,在
20、指令在指令 XCHG BX,BP+SI执行后,相关寄存器和执行后,相关寄存器和存储器的内容是什么?存储器的内容是什么?w 分析:源操作数的物理地址=(SS)16+(BP)+(SI)=2F000H+0200H+0046H=2F246Hw 指令的功能:(BX)(2F246H)w 指令执行结果:(BX)=4154H,(2F246H)=6F30H2.累加器专用传送指令w IN(input)输入w OUT(output)输出w XLAT(translate)换码注:这组指令只限于使用累加器EAX,AX或AL传送信息IN输入指令w 长格式:IN AL,PORT(字节)IN AX,PORT(字)IN EAX
21、,PORT(双字)w 操作:(AL)(PORT)(字节)(AX)(PORT1,PORT(字)(EAX)(PORT3,PORT+2,PORT1,PORT)(双字)IN输入指令w 短格式:IN AL,DX(字节)IN AX,DX(字)IN EAX,DX(双字)w 操作:(AL)(DX)(字节)(AX)(DX)+1,(DX)(字)(EAX)(DX)+3,(DX)+2,(DX)+1,(DX)双字)OUT输出指令w 长格式:OUT PORT,AL(字节)OUT PORT,AX(字)OUT PORT,EAX(双字)w 操作:(AL)(PORT)(字节)(AX)(PORT1,PORT(字)(EAX)(POR
22、T3,PORT+2,PORT1,PORT)(双字)OUT输出指令w 短格式:OUT DX,AL(字节)OUT DX,AX(字)OUT DX,EAX(双字)w 操作:(AL)(DX)(字节)(AX)(DX)+1,(DX)(字)(EAX)(DX)+3,(DX)+2,(DX)+1,(DX)双字)w 例:在打印机接口中,数据寄存器的端口地址为378H,状态寄存器的端口地址为379H,控制寄存器的端口地址为37AH。获取打印机状态:MOV DX,379H IN AL,DX控制打印机:MOV DX,37AH OUT DX,AL XLAT换码指令w 格式:XLAT OPR 或 XLATw 操作:16位指令:
23、(AL)(BX)+(AL)32位指令:(AL)(EBX)+(AL)Mov ax,1234H mov cl,4 mov bx,100hloop1:ror ax,4 Xlat ;显示输出 ;跳转至loop1(BX)(AL)DS数据段30H31H32H78H34H33H(AL)=34H换码指令XLAT例题3.地址传送指令w LEA(load effective address)w LDS(load DS with pointer)w LES(load ES with pointer)w LFS(load FS with pointer)w LGS(load GS with pointer)w LSS
24、(load SS with pointer)LEA有效地址传送指令w 格式:LEA REG,SRCw 操作:(REG)SRC的有效地址n目标操作数可为16位/32位的寄存器,但不能为段寄存器n源操作数可为除立即数和寄存器外的任何一种寻址方式LEA有效地址传送指令w 例:(BX)0400H,(SI)003CH (0403CH)1234H MOV BX,BXSI LEA BX,BX+SILDS指针送寄存器和段寄存器w 格式:LDS REG,SRCw 操作:(REG)(SRC)(DS)(SRC2)或 (DS)(SRC4)n目标寄存器不能为段寄存器n源操作数只能为存储器寻址方式w 例例:(DS)=B0
25、00H,(BX)=080AH,(0B080AH)=05AEH,(0B80CH)=4000H,(405AEH)=9634H,在在执行指令执行指令LDS DI,BXMOV AX,DI后,后,(AX)=?BX=080AHB0000H0B080AH40000H34H96HAEH05H00H40H405AEH05AEH0B080CH(DI)=05AEHDI)=05AEH(DS)=4000HDS)=4000Hw 结果结果:(DS)=4000H(DI)=05AEH(AX)=9634H标志寄存器传送指令w LAHF(load AH with flags)w SAHF(store AH into flags)w
展开阅读全文