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、1第第3章章 80X86指令系统指令系统3.1 指令格式3.2 寻址方式3.3 数据传送指令3.4 算术运算指令3.5控制转移类指令3.6串操作指令3.7 逻辑运算指令23.1 指令格式指令格式 指令由操作码和操作数构成,操作码说明指令的功能,用指令助记符表示;操作数由各种不同的寻址方式提供。汇编语言的指令格式如下:指令助记符 操作数1,操作数2,操作数3;注释3 常见的指令格式举例:MOV AX,15H CMP AX,BX43.2 寻址方式寻址方式 在指令中,计算操作数或操作数存放位置的方法称为寻址方式 80 x86系统有七种基本的寻址方式:立即寻址方式、寄存器寻址方式、直接寻址方式、寄存器
2、间接寻址方式、寄存器相对寻址方式、基址加变址寻址方式、相对基址加变址寻址方式等 53.2.1 立即寻址方式立即寻址方式 MOV AH,80H;指令执行后(AH)=80H ADD AX,1234H;假定指令执行前(AX)=0014H,则执行后(AX)=0014H+1234H=1248H MOV ECX,123456H;假定指令执行前(ECX)=A0014H,则执行后(ECX)=A0014H+123456H=1C346AH MOV B1,12H ;把立即数12H送到名称为B1的字节存储单元中 MOV W1,3456H;把立即数3456H送到名称为W1的字存储单元中63.2.2 寄存器寻址方式寄存器
3、寻址方式 1 源操作数是寄存器寻址方式源操作数是寄存器寻址方式 2 目的操作数是寄存器寻址方式目的操作数是寄存器寻址方式 3 源和目的操作数都是寄存器寻址方式源和目的操作数都是寄存器寻址方式73.2.3 直接寻址方式直接寻址方式 操作数存放在数据段中,所以,其物理地址将由数据段寄存器DS和指令中给出的有效地址直接形成,但如果使用段超越前缀,那么,操作数可存放在其它段 8 例例3.2 假设有指令:MOV BX,1234H,在执行时,(DS)=2000H,内存单元21234H的值为5D2AH。问该指令执行后,BX的值是什么?解:根据直接寻址方式的寻址规则,把该指令的具体执行过程用图3.2来表示。从
4、图3.2中,可看出执行该指令要分三步:9 1由于1234H是一个直接地址,它紧跟在指令的操作码之后,随取指令而被读出;2访问数据段的段寄存器是DS,所以,用DS的值和偏移量1234H相加,得存储单元的物理地址:21234H;3取单元21234H的值5D2AH,并按“高高低低”的原则存入寄存器BX中。所以,在执行该指令后,BX的值就为5D2AH。103.2.4 寄存器间接寻址方式寄存器间接寻址方式 操作数在存储器中,操作数的有效地址用SI、DI、BX和BP等四个寄存器之一来指定,称这种寻址方式为寄存器间接寻址方式。该寻址方式物理地址的计算方法如下:11 EA=(DI)/(SI)/(BP)/(BX
5、)PA=(DS)*16+EA 寄存器间接寻址方式读取存储单元的原理如图3.3所示。在不使用段超越前缀的情况下,有下列规定:若有效地址用SI、DI和BX等之一来指定,则其缺省的段寄存器为DS;若有效地址用BP来指定,则其缺省的段寄存器为SS(即:堆栈段)。12 例例3.4 假设有指令:MOV BX,DI,在执行时,(DS)=1000H,(DI)=2345H,存储单元12345H的内容是4354H。问执行指令后,BX的值是什么?解:根据寄存器间接寻址方式的规则,在执行本例指令时,寄存器DI的值不是操作数,而是操作数的地址。13 该操作数的物理地址应由DS和DI的值形成,即:PA=(DS)*16+(
6、DI)=1000H*16+2345H=12345H。所以,该指令的执行效果是:把从物理地址为12345H开始的一个字存储单元中的值传送给BX寄存器。其执行过程如右图3.4所示 143.2.5 寄存器相对寻址方式寄存器相对寻址方式 操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)或变址寄存器(SI、DI)的内容和指令中的8位/16位偏移量之和。其有效地址的计算公式如下式所示。EA=(BX/(BP)+位移量,PA=(DS)*16+EA 在不使用段跨越前缀的情况下,有下列规定:若有效地址用SI、DI和BX等之一来指定,则其缺省的段寄存器为DS;若有效地址用BP来指定,则其缺省的段寄存器为S
7、S。15 例例3.5 假设指令:MOV BX,SI+100H,在执行它时,(DS)=1000H,(SI)=2345H,内存单元12445H的内容为39A8H,问该指令执行后,BX的值是什么?解:根据寄存器相对寻址方式的规则,在执行本例指令时,源操作数的有效地址EA为:EA=(SI)+100H=2345H+100H=2445H 该操作数的物理地址应由DS和EA的值形成,即:PA=(DS)*16+EA=1000H*16+2445H=12445H。所以,该指令的执行效果是:把从物理地址为12445H开始的一个字单元中的值传送给BX。其执行过程如图3.5所示 163.2.6 基址加变址寻址方式 操作数
8、在存储器中,其有效地址是一个基址寄存器(BX、BP)和一个变址寄存器(SI、DI)的内容之和。其有效地址的计算公式如下式所示:EA=(BX)/(BP)+(SI)/(DI);PA=(DS)*16+EA 。在不使用段超越前缀的情况下,规定:如果有效地址中含有BP,则缺省的段寄存器为SS;否则,缺省的段寄存器为DS。17 例例3.6 假设指令:MOV BX,BX+SI,在执行时,(DS)=1000H,(BX)=2100H,(SI)=0011H,内存单元12111H的内容为1234H。问该指令执行后,BX的值是什么?解:根据基址加变址寻址方式的规则,在执行本例指令时,源操作数的有效地址EA为:EA=(
9、BX)+(SI)=2100H+0011H=2111H,该操作数的物理地址应由DS和EA的值形成,即:PA=(DS)*16+EA=1000H*16+2111H=12111H。所以,该指令的执行效果是:把从物理地址为12111H开始的一个字单元中的值传送给BX寄存器,所以,执行后(BX)=1234H。183.2.7 相对基址加变址寻址方式相对基址加变址寻址方式 操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)的值、一个变址寄存器(SI、DI)的值和指令中的8位/16位偏移量之和。其有效地址的计算公式如下式所示:EA=(BX)/(BP)+(SI)/(DI)+位移量,PA=(DS)*16+E
10、A.在不使用段超越前缀的情况下,规定:如果有效地址中含有BP,则其缺省的段寄存器为SS;否则,其缺省的段寄存器为DS。19 例例3.7 假设指令:MOV AX,BX+SI+200H,在执行时,(DS)=3000H,(BX)=2100H,(SI)=0010H,内存单元32310H的内容为5678H。问该指令执行后,AX的值是什么?20 解:根据相对基址加变址寻址方式的规则,在执行本例指令时,源操作数的有效地址EA为:EA=(BX)+(SI)+200H=2100H+0010H+200H=2310H 该操作数的物理地址应由DS和EA的值形成,即:PA=(DS)*16+EA=3000H*16+2310
11、H=32310H.所以,该指令的执行效果是:把从物理地址为32310H开始的一个字单元中的值传送给AX寄存器。执行后(AX)=5678H 213.3 数据传送指令(1)数据传送指令。(2)算术运算指令。(3)控制转移指令。(4)串操作指令。(5)逻辑运算指令。(6)输入输出指令。(7)处理器控制指令。(8)保护方式指令。223.3.1 通用数据传送指令通用数据传送指令 1.传送指令 格式:MOV DEST,SRC 功能:把一个字节,字或双字从源操作数SRC传送至目的操作数DEST。执行的操作:(DEST)(SRC)23 例例 3.9 CPU内部寄存器和存储器之间的数据传送。MOV BX,AX
12、;间接寻址,把AX寄存器的内容传送到BX寄存器内容为地址的单元内(16位)MOV EAX,EBX+ESI;基址变址寻址(32位)MOV AL,BLOCK;BLOCK为变量名,直接寻址(8位)24 3.交换指令(1)格式:XCHG OPR1,OPR2 功能:交换操作数OPR1和OPR2的值,操作数数据类型为字节、字或双字。允许通用寄存器之间,通用寄存器和存储器之间交换数据,但不允许使用段寄存器。执行的操作:(OPR1)(OPR2)例例 3.15 交换指令的举例交换指令的举例 XCHG AX,BX ;通用寄存器之间交换数据(16位)XCHG ESI,EDI ;通用寄存器之间交换数据(32位)XCH
13、G BX,BP+SI ;通用寄存器和存储单元之间交换数据(16位),253.3.2 堆栈操作指令堆栈操作指令 1.入栈指令 1)源操作数入栈 格式:PUSH SRC 功能:将源操作数压入堆栈,源操作数允许为16位或32位通用寄存器、存储器和立即数以及16位段寄存器26 执行的操作:16位指令:(SP)(SP)-2 (SP)+1,(SP)(SRC)32位指令:(ESP)(ESP)-4 (ESP)+3,(ESP)+2,(ESP)+1,(ESP)(SRC)27(2)寄存器入栈 格式:PUSHA PUSHAD 功能:PUSHA将16位通用寄存器压入堆栈,压栈顺序为AX,CX,DX,BX,SP,BP,S
14、I,DI。指令执行后(SP)(SP)-16。PUSHAD将32位通用寄存器压入堆栈,压栈顺序为EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI。指令执行后(ESP)(ESP)-32。28指令执行前堆栈段指令执行前堆栈段指令执行后堆栈段指令执行后堆栈段低地址低地址低地址低地址 (SP)(SP)07072121(SP)(SP)进栈方向进栈方向高地址高地址(A X)=(A X)=2107H2107H图图3.10 PUSH AX 3.10 PUSH AX 指令的执行情况指令的执行情况29 2.出栈指令 1)弹出操作数 格式:POP DEST 功能:从栈顶弹出操作数送入目的操作数。目的操作
15、数允许为16或32位通用寄存器、存储器和16位段寄存器。当操作数数据类型为字类型,出栈操作使SP加2;当操作数数据类型为双字类型,出栈操作使SP加4。30 2)弹出寄存器数据 格式:POPA POPAD 功能:POPA从堆栈移出16字节数据,并且按顺序存入寄存器DI、SI、BP、SP、BX、DX、CX、AX中。POPAD从堆栈移出32字节数据,并且按顺序存入寄存器EDI、ESI、EBP、ESP、EBX、EDX、ECX、EAX中。31指令执行前堆栈段指令执行前堆栈段 指令执行后堆栈段指令执行后堆栈段低地低地址址低地址 (SP)(SP)0707070721212121(S P)(S P)出栈方向(
16、AX)=?(AX)=?(AX)=2107(AX)=2107H H323.3.3 地址传送指令地址传送指令 1.取有效地址指令 格式:LEA REG,MEM 功能:将源操作数的有效地址传送到通用寄存器,操作数REG为16位或32位通用寄存器,源操作数为16位或32位存储器操作数。执行的操作:(REG)(MEM)332.有效地址送寄存器指令 格式:LDS(ES,FS,GS,SS)REG,MEM 功能:根据源操作数指定的偏移地址,在数据段中取出段地址和偏移地址分别送指定的段寄存器和指定的通用寄存器。执行的操作:(REG)(MEM)(SREG)(MEM+2)/(MEM+4)343.3.4 标志寄存器传
17、送指令标志寄存器传送指令 1.标志寄存器送/存AH指令 格式:LAHF(load AH with flags)SAHF(store AH into flags)功能:LAHF将标志寄存器中低8位送AH中。SAHF将AH中内容送标志寄存器中低8位。执行的操作:LAHF:(AH)(flags的低字节)SAHF:(flags的低字节)(AH)352.标志寄存器入/出栈指令 格式:PUSHF(push the flags)POPF(pop the flags)功能:PUSHF将标志寄存器低16位内容压入堆栈。POPF将当前栈顶一个字传送到标志寄存器低16位中。执行的操作:PUSHF:(SP)(SP)-
18、2 (SP)+1,(SP)(FLAGS)POPF:(FLAGS)(SP)+1,(SP)(SP)(SP)+2363 32位标志寄存器入/出栈指令 格式:PUSHFD(push the eflags)POPFD(pop the eflags)功能:PUSHFD将标志寄存器32位内容压入堆栈,SPSP-4。POPFD将当前栈顶一个双字传送到32位标志寄存器中,SPSP+4。37 执行的操作:PUSHFD:(ESP)(ESP)-4 (ESP)+3,(ESP)+2,(ESP)+1,(ESP)(EFLAGS AND 0FCFFFFH);进行与操作是为了清除VM和RF位)POPFD:(EFLAGS)(ESP
19、)+3,(ESP)+2,(ESP)+1,(ESP)(ESP)(ESP)+4383.4 算术运算指令算术运算指令 3.4.1加法指令加法指令 格式:ADD DEST,SRC ;执行的操作:(DEST)(DESG)+(SRC)格式:ADC DEST,SRC ;执行的操作:(DEST)(DESG)+(SRC)+CF 功能:ADD是将源操作数与目的操作数相加,结果传送到目的操作数。ADC是将源操作数与目的操作数以及CF(低位进位)值相加,结果传送到目的操作数。393.4.2 减法指令减法指令 格式:SUB DEST,SRC 执行的操作:(DEST)(DESG)-(SRC)SBB DEST,SRC 执行
20、的操作:(DEST)(DESG)-(SRC)-CF 功能:SUB将目的操作数减源操作数,结果送目的操作数。SBB将目的操作数减源操作数,还要减CF(低位借位)值,结果送目的操作数。40 3.4.3 加加1减减1指令指令 格式:INC DEST DEC DEST 功能:INC指令将目的操作数加1,结果送目的操作数。DEC指令将目的操作数减1,结果送目的操作数。目的操作数为通用寄存器或存储器操作数。413.4.4 比较指令比较指令 1 格式:CMP DEST,SRC 执行的操作:(DEST)-(SRC)功能:目的操作数减源操作数,结果不回送,只是根据结果设置条件标志位。CMP指令后往往跟着一个条件
展开阅读全文