【教学课件】第11章80x86汇编语言程序设计.ppt
《【教学课件】第11章80x86汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第11章80x86汇编语言程序设计.ppt(183页珍藏版)》请在三一办公上搜索。
1、2023/8/6,1,第11章 80 x86汇编语言程序设计,2023/8/6,2,有效地址(effective address EA)操作数在段的偏移地址寻址方式 产生有效地址的方法,80 x86的寻址方式有:1、立即寻址2、寄存器寻址3、直接寻址4、寄存器间接寻址5、寄存器相对寻址,6、基址变址寻址7、基址变址相对寻址8、比例变址寻址9、基址比例变址寻址10、相对基址比例变址寻址,310均是与存储器有关的寻址方式,其中,810仅适用于80386及其后继机型,,11.1 80 x86的寻址方式,2023/8/6,3,1、立即寻址 操作数以常量形式直接放在指令中,紧跟在操作码之后 机器码存放形
2、式如下:代码段 代码段 OP 操作码 OP 操作码 D8 操作数 低位 D16 操作数 高位 D16,立即寻址示例 MOV AH,-40;-40AH MOV AX,34D8H;34HAH,D8HAL MOV AX,-40;0FFD8H(-40)AX MOV EAX,12345678H;12345678HEAX,我们首先讨论两种与存储器无关的寻址方式:,2023/8/6,4,2、寄存器寻址 操作数存放在某个寄存器中,指令指定寄存器号 指令 寄存器 寄存器号 操作数,寄存器号,操作数,寄存器寻址示例 MOV AH,BL;(BL)-AH MOV DS,AX;(AX)-DS MOV SI,AX;(AX
3、)-SI MOV ECX,EDX;(EDX)ECX,说明:立即和寄存器寻址方式不需访问存储器即可 得到操作数,速度快,2023/8/6,5,有效地址(EA)的4种组成成分:,位移量(displacement)存放在指令中的8位、16位或32位的数,是一个地址,有效地址的计算:EA=基址+(变址*比例因子)+位移量,比例因子(scale factor)其值可为1,2,4或8,386及其后继机型新增加的,变址(index)存放在变址寄存器中的内容,用于访问数组的某个元素,基址(base)存放在基址寄存器中的内容,用于指向数组的首地址,下面我们来讨论余下的几种与存储器有关的寻址方式,先介绍几个概念:
4、,2023/8/6,6,16/32位寻址时有效地址四种成分的组成 四种成分 16位寻址 32位寻址 位移量 0,8,16位 0,8,32位基址寄存器 BX,BP 任何32位通用寄存器(包括ESP)变址寄存器 SI,DI 除ESP以外的32位通用寄存器 比例因子 无 1,2,4,8,2023/8/6,7,访存类型 所用段及寄存器 缺省选择规则 指令 代码段 CS 用于取指 堆栈 堆栈段 SS 所有的堆栈的进栈和出栈 任何用ESP或EBP作为基址 寄存器的访存 目的串 附加数据段 ES 串处理指令的目的串局部数据 数据段 DS 除相对于堆栈以及串处理的 目的串以外的所有数据访问,默认段选择规则,2
5、023/8/6,8,不允许使用段超越前缀的情况:,(1)串操作指令的目的串必须用ES段(2)PUSH指令的目的和POP指令的源必须用SS段(3)程序的指令必须存放在CS段,访问非默认段数据的方法段超越,数据的存放比较灵活,除了放在默认的DS段,还可以存放在别的段,此时访问他们需要使用段超越前缀,可用的段超越前缀有CS:,DS:,ES:,SS:,FS:,GS:。,段超越举例:MOV AX,10H;DS段10H处的一个字的数据赋给AX寄存器MOV AX,ES:10H;ES段10H处的一个字的数据赋给AX寄存器,2023/8/6,9,3、直接寻址 操作数地址的偏移量(有效地址)在指令中,物理地址=指
6、定段的段基址*16+偏移量 系统默认,操作数在数据段,段基地址,EA,操作数,+,指令,存储器,MOV AX,2000H;立即寻址MOV AX,2000H;直接寻址,2023/8/6,10,直接寻址示例1 MOV AX,1000H 物理地址 设(DS)=10A0H 10A00H 代码段+1000H OP 11A00H 00H 10H 数据段 11A00H 30H 50H,50H,30H,AX,(本章中图示存储器地址从上到下递增),低地址,2023/8/6,11,直接寻址示例2MOV BL,ES:0100H 物理地址 设(ES)=3000H 30000H(DS)=2000H+0100H 3010
7、0H 30100H 4B 00 BL,4B,在汇编语言指令中,可以用符号地址代替数值地址如:MOV AX,BUFF或 MOV AX,BUFF其中BUFF为存放数据单元的符号地址。,2023/8/6,12,4、寄存器间接寻址 操作数在存储器中,操作数地址的偏移量在寄存器中,基址或变址寄存器,EA,操作数,+,存储器,指令,寄存器,段基地址,寄存器间接寻址示例 MOV AL,BX MOV AX,CS:SI MOV ECX,EDX MOV AH,BP,2023/8/6,13,MOV AH,BPMOV BX,SIMOV CX,SI设(SS)=1000H,(DS)=2000H,(BP)=0B10H,(S
8、I)=032AH 物理地址 物理地址 10000H 20000H+0B10H+032AH 10B10H 2032AH 40H 00H 3EH 46H,40H,AH,10B10H,2032AH,463EH,BX,2032BH,10B11H,SI,032AH,032AH,CX,2023/8/6,14,5、寄存器相对寻址(直接变址寻址)操作数的有效地址是基址(或变址)寄存器的内容加上指令中指定的位移量,基址或变址寄存器位移量,地址,+,+,操作数,指 令,寄存器,段基地址,存储器,EA,可用于数组元素的访问,2023/8/6,15,寄存器相对寻址示例 MOV AX,3000HSI(或SI+3000H
9、)MOV AX,COUNTSI;COUNT是符号地址(或 MOV AX,COUNT+SI)若(DS)=3000H,(SI)=2000H,COUNT=3000H 30000H 2000H+3000H 35000H,1234H,35000H 34H 12H,AX,2023/8/6,16,6、基址变址寻址 操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和,基址寄存器变址寄存器,变址值,基址值,+,+,操作数,指 令,变址寄存器,基址寄存器,段基地址,存储器,EA,2023/8/6,17,基址变址寻址示例 MOV AX,BX+DI MOV AX,BXDI,若(DS)=2100H,(BX)=0
10、158H,(DI)=10A5H,物理地址 21000H 0158H+10A5H 221FDH,221FDH 34H 12H,1234H,AX,2023/8/6,18,7、基址变址相对寻址 操作数的有效地址是一个基址寄存器的内容、一个变址寄存器的内容及位移量之和,基址寄存器变址寄存器位移量,变址值,基址值,+,+,操作数,指 令,变址寄存器,基址寄存器,段基地址,存储器,EA,2023/8/6,19,相对基址变址寻址示例 MOV AX,MASKBX+SI;MASK是符号地址 若(DS)=3000H,(BX)=2000H,(SI)=1000H,MASK=0250H 物理地址 30000H 2000
11、H 1000H+0250H 33250H 33250H 20H 43H,4320H,AX,2023/8/6,20,8、比例变址寻址 操作数的有效地址是变址寄存器的内容乘以指令中指定的比例因子及位移量之和,变址寄存器 比例因子位移量,下标,*,+,+,操作数,存储器,段基地址,变址寄存器,变址值,指 令,EA,2023/8/6,21,比例变址寻址示例 MOV EAX,COUNTESI*4,元素0,12000H,元素1,元素2,元素3,+1+2+3+4,+12,EAX,存储器,EA=ESI*4COUNT设(ESI)=3,(DS)=1000HCOUNT=2000H,2023/8/6,22,9、基址比
12、例变址寻址 操作数的有效地址是变址寄存器的内容乘以指令中指定的比例因子加基址寄存器的内容之和,基址寄存器变址寄存器比例因子,下标,基址值,*,+,+,操作数,指 令,变址寄存器,基址寄存器,变址值,段基地址,存储器,EA,基址比例变址寻址示例 MOV ECX,EBX+ESI*8,2023/8/6,23,10、相对基址比例变址寻址 操作数的有效地址是变址寄存器的内容乘以指令中指定的比例因子加基址寄存器的内容、再加位移量之和,基址寄存器变址寄存器比例因子位移量,下标,基址值,*,+,+,操作数,指 令,变址寄存器,基址寄存器,变址值,段基地址,存储器,EA,相对基址比例变址寻址示例 MOV EAX
13、,TABLEEBX+EDI*4,2023/8/6,24,11.2 80 x86的指令系统,数据传送指令算术运算指令逻辑运算与移位指令串操作指令控制转移指令处理器控制指令,80 x86指令的一般汇编语言格式:标号:指令助记符目的操作数,源操作数;注释 其中,表示可选项;,2023/8/6,25,数据传送指令,通用数据传送指令地址传送指令标志寄存器传送指令 输入输出指令类型转换指令,2023/8/6,26,PUSHA/PUSHAD(push all registers)所有寄存器进栈POPA/POPAD(pop all registers)所有寄存器出栈,1、通用数据传送指令,MOV(move)传
14、送MOVSX(move with sigh-extend)带符号扩展传送MOVZX(move with zero-extend)带零扩展传送,PUSH(push onto the stack)进栈POP(pop from the stack)出栈,XCHG(exchange)交换XLAT(translate)换码,2023/8/6,27,MOV 传送指令格式:MOV DST,SRC操作:DST-(SRC)即把源操作数的内容送入目的操作数说明:1)可以进行8位、16位或32位数据的传送 2)SRC可为立即数、寄存器、存储器操作数 3)DST可为寄存器、存储器操作数 4)该指令不影响任何状态标志位
15、,存储器,段寄存器CS DS SS ES,立即数,通用寄存器AX BX CX DXBP SP SI DI,2023/8/6,28,MOV指令示例1,MOV EAX,EBX+ECX*4;存储器操作数MOV AX,ARRAYSI;传送到寄存器,MOV AX,0B00H;立即数传送到寄存器MOV CL,10000000B,MOV VALUE,100H;立即数传送到存储单元MOV ES:BX,4BH,MOV BX,CX;寄存器内容传送到存储器MOV BPDIBUFF,AX,MOV AL,BL;寄存器之间传送MOV BP,SI,2023/8/6,29,MOV指令示例2 MOV AX,ARRAYSI设(D
16、S)=3000H,(SI)=2000H,ARRAY=8000H 物理地址 30000H 2000H+8000H 3A000H 3A000H 45H 0BH,0B45H,AX,2023/8/6,30,MOV指令注意事项:,(1)两个操作数长度必须一致 MOV AL,BX;不合法例外:源是16进制立即数,小于目的操作数时,高位按0扩展,源是10进制立即数,小于目的操作数时,高位按符号位扩展 MOV AX,0D8H 执行后,(AX)=00D8H MOV AX,-40 执行后,(AX)=FFD8H,(2)不允许用立即数为段寄存器赋值 例:MOV ES,10A0H;不合法,2023/8/6,31,(3)
17、不允许两个操作数均是存储器操作数 MOV X,Y;不合法 可以通过一个寄存器传送:MOV AX,Y MOV X,AX,(4)不允许两个操作数均为段寄存器 MOV ES,DS;不合法,(5)不允许CS、IP和立即数做目标操作数 MOV CS,AX;不合法 MOV 100H,AX;不合法 MOV IP,BX;不合法,2023/8/6,32,MOVSX 带符号扩展传送指令格式:MOVSX DST,SRC操作:DST-符号扩展(SRC),MOVZX 带零扩展传送指令格式:MOVSX DST,SRC操作:DST-零扩展(SRC),说明:1)源操作数是8位或16位寄存器或存储器的内容 2)目的操作数必须是
18、16位或32位寄存器,2023/8/6,33,MOVSX指令示例 MOVSX EAX,CL 设(CL)=0ABH,执行后(EAX)=0FFFFFFABH 负号扩展 若(CL)=57H,执行后(EAX)=00000057H 正号扩展,MOVZX指令示例 MOVZX EAX,DATA 设(DATA)=87ADH,执行后(EAX)=000087ADH 0扩展,2023/8/6,34,PUSH 压栈指令格式:PUSH SRC操作:16位指令:SP-(SP)-2(SP)+1,(SP)-(SRC)32位指令:ESP(ESP)-4(ESP)+3,(ESP)+2,(ESP)+1,(ESP)(SRC),说明:1
19、)源操作数可以是寄存器或存储器操作数 2)必须以字或双字为单位操作 3)32位指令允许SRC是16位或32位立即数,也容许是32位寄存器和存储器操作数,举例:PUSH AX PUSH DATBXSI PUSH 1234H PUSH 87654321H PUSH EAX,2023/8/6,35,压栈指令示例 PUSH AX 执行前 执行后 AX AX 25H 524FEH 31H 524FFH SP 52500H SP 52500H,3125H,3125H,低地址,低地址,进栈方向,2023/8/6,36,POP 出栈指令格式:POP DST操作:16位指令:DST-(SP)+1,(SP)SP-
20、(SP)+2 32位指令:DST(ESP)+3,(ESP)+2,(ESP)+1,(ESP)(ESP)(ESP)+4,举例:POP AX POP DATBXSI POP DS POP ECX,2023/8/6,37,出栈指令示例 POP BX 执行前 执行后 BX BX 75C1H 低地址 低地址 SP 6Bh 51000H 6Bh 51000H 48h 1H 48h 1H 9Ah 2H SP 9Ah 2H 28h 3H 28h 3H,48h 6Bh,出栈方向,2023/8/6,38,PUSHA/PUSHAD 所有寄存器进栈格式:PUSHA PUSHAD,PUSHAD:(386及其后继机型)32
21、位通用寄存器依次进栈,次序为:EAX,ECX,EDX,EBX,指令执行前的ESP,EBP,ESI,EDI 指令执行后 ESP(ESP)-32 仍指向栈顶,PUSHA:(286及其后继机型)16位通用寄存器依次进栈,次序为:AX,CX,DX,BX,指令执行前的SP,BP,SI,DI 指令执行后 SP(SP)-16 仍指向栈顶,操作:,2023/8/6,39,PUSHAD指令示例,(SDI)-32(ESI)-28(EBP)-24(ESP)原-20(EBX)-16(EDX)-12(ECX)-8(EAX)-4 0,(ESP)原,(ESP),执行前,执行后,2023/8/6,40,POPA/POPAD
22、所有寄存器出栈格式:POPA POPAD,POPAD:(386及其后继机型)32位通用寄存器依次出栈,次序为:EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX 指令执行后 ESP(ESP)+32 仍指向栈顶,POPA:(286及其后继机型)16位通用寄存器依次出栈,次序为:DI,SI,BP,SP,BX,DX,CX,AX 指令执行后 SP(SP)+16 仍指向栈顶,操作:,2023/8/6,41,XCHG 交换指令格式:XCHG OPR1,OPR2操作:(OPR1)(OPR2),说明:1)操作数不允许为段寄存器 2)两个操作数长度必须相同 3)本指令不影响状态标志位,如:XCHG
23、EAX,EBX;寄存器之间交换 XCHG BX,BP+DI;寄存器与存储器之间交换 XCHG SI,DX,2023/8/6,42,交换指令示例 XCHG DX,DATABP设(SS)=5000H,(BP)=0400H,DATA=1800H 物理地址=5000H*16+0400H+1800H=51C00H 执行前 执行后 DX DX 37CDH 51C00H 42H 51C00H 1 6DH 1,CDH37H,6D42H,2023/8/6,43,XLAT查表指令(换码指令)格式:XLAT TABLE 或 XLAT操作:AL-(BX)+(AL)或 AL(EBX)+(AL)将AL中的当前内容转换为表
24、中某一种代码。执行前一定要将表的首址(TABLE)赋给BX(或EBX)寄存器,将代码在表中距首址的偏移放在AL寄存器中。XLAT指令示例 TABLE 30H LEA BX,TABLE+1 31H;表首址给BX+2 32H MOV AL,4+3 33H;待转换内容到AL+4 34H XLAT+5 35H+6 36H+7 37H,34H,AL,2023/8/6,44,LDS(load DS with pointer)指针送寄存器和DS LES(load ES with pointer)指针送寄存器和ES LFS(load FS with pointer)指针送寄存器和FS LGS(load GS
25、with pointer)指针送寄存器和GS LSS(load SS with pointer)指针送寄存器和SS,2、地址传送指令,LEA(load effective address)有效地址送寄存器,2023/8/6,45,LEA指令示例 LEA SI,BX LEA DI,BUFFER 设(DS)=2000H,(BX)=1234H;将变量BUFFER的 执行后;地址送到DI,而 SI;不是将BUFFER变 21234H 78H;量的值送DI 5 56H,1234H,1234H,BX,LEA 装载有效地址指令格式:LEA DST,SRC操作:DST-SRC的有效地址EA说明:SRC必须是存
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件 教学 课件 11 80 x86 汇编语言 程序设计
链接地址:https://www.31ppt.com/p-5657708.html