Win32汇编语言-寻址方式.ppt
《Win32汇编语言-寻址方式.ppt》由会员分享,可在线阅读,更多相关《Win32汇编语言-寻址方式.ppt(59页珍藏版)》请在三一文库上搜索。
1、2019/9/2,1,宋军 计算机学院信息安全系 ,寻址方式,2,2019/9/2,寻址方式,操作数的寻址方式 立即数寻址 寄存器寻址 存储器寻址 直接寻址 间接寻址 相对寻址,3,2019/9/2,立即数寻址,操作数在指令中给出 指令格式: MOV AL, 5 MOV AX, 3064H MOV AL, A 只能用于 SRC 字段 MOV 40H, AL SRC 和 DST 的字长一致 MOV AH, 3064H ,4,2019/9/2,寄存器寻址,操作数存放在CPU的内部寄存器reg中: 8位寄存器r8:AH/AL/BH/BL/CH/CL/DH/DL 16位寄存器r16:AX/BX/CX/
2、DX/SI/DI/BP/SP 32位寄存器r32: EAX/EBX/ECX/EDX/ESI/EDI/ESP/EBP 4个段寄存器seg中:CS/DS/SS/ES 指令格式:MOV AX, BX MOV AL, BH MOV AX, 3064H SRC 和 DST 的字长一致 MOV AH, BX ,5,2019/9/2,存储器寻址(直接寻址),寻址主存中存储的操作数就称为存储器寻址方式(也称为内存寻址方式) 指令中给出的是有关操作数的主存地址信息 指令中主存操作数给出的地址只是偏移地址(称有效地址EA) 实模式下,段基地址在默认的段寄存器中或用段超越前缀指定的段寄存器中,6,2019/9/2,
3、有效地址的组成,位移量:存放在指令中的8位、16位或32位的数值或常量 基址:存放在基址寄存器中的内容。它是有效地址中的基址部分; 变址:是存放在变址寄存器中的内容 比例因子:可以是1248 比例因子只适用于保护模式。,7,2019/9/2,16位存储器寻址有效地址,16位有效地址基址寄存器变址寄存器816位位移量,其中: 基址寄存器只能是BX或BP 变址寄存器只能是SI或DI 位移量可以是8/16位数 当基址寄存器为BP的时候,默认的堆栈段寄存器SS;其他情况下,默认数据段寄存器DS。,8,2019/9/2,32位存储器寻址有效地址,其中: 位移量是8/16/32数值或者常量 任何32位通用
4、寄存器都可以作为基址寄存器(默认ESP/EBP使用SS;其他默认使用DS) 任何除ESP之外的32位通用寄存器都可以作为变址寄存器,32位有效地址基址寄存器变址寄存器8/16/32位位移量,9,2019/9/2,直接寻址方式,例:MOV AX, 2000H EA=2000H, 假设(DS)=3000H, 那么PA=32000H,隐含的段为数据段 DS,10,2019/9/2,直接寻址方式,可使用段跨越前缀 MOV AX, ES: 2000H 操作数地址可由变量(符号地址)表示, 但要注意 VALUE DB 10 变量的属性 MOV AH, VALUE ; 等价于 MOV AH, VALUE 可
5、用符号地址代替数值地址 MOV AX, VALUE MOV AX, WORD PTR VALUE 操作数尺寸要一致,11,2019/9/2,间接寻址 / 间接操作数,操作数的有效地址存放在寄存器中 方括号括起来的寄存器,如BX,SS:EBX 保护模式:32位通用寄存器 实地址:16位,SI,DI,BX,BP 寄存器里存放着数据的偏移地址 用作间接操作数的寄存器使用时应先初始化,.data var1 BYTE 10h, 20h, 30h .code MOV esi, offset var1 MOV al, esi; 如在附加段中, MOV al, ES:esi,12,2019/9/2,尺寸问题,
6、PTR:与间接操作数的联合使用 PTR操作符指明操作数的大小,.data var1 BYTE 10h, 20h, 30h .code MOV esi, offset var1 INC esi ; , operand must have size,.data var1 BYTE 10h, 20h, 30h .code MOV esi, offset var1 INC BYTE PTR esi,13,2019/9/2,数组求和,.386 .model flat, stdcall .data W1 WORD 1234h, 5678h, 4321h, 8765h .code mov esi, offs
7、et W1 mov ax, esi ; 1234h add esi, 2 add ax, esi ; 1234h + 5678h add esi, 2 add ax, esi ; 1234h + 5678h + 4321h add esi, 2 add ax, esi ; 1234h + 5678h + 4321h + 8765h,14,2019/9/2,例:寄存器间接寻址方式,.386 .model flat, stdcall .data d_var dword 12345678h .code start: mov esi, offset d_var mov eax, esi mov eax
8、, esi mov eax, offset c_var mov eax, cs:eax ret ;返回操作系统 c_var dword 87654321h end start ;汇编结束,15,2019/9/2,例:运行结果(1),16,2019/9/2,例:运行结果(2),17,2019/9/2,寄存器相对寻址方式,采用寄存器间接寻址的操作数的有效地址是寄存器内容与有符号8位,16位或32位位移量之和 操作数的有效地址的计算公式是: 位移量可以是正数,也可以是负数,有效地址寄存器+8/16/32位位移量,18,2019/9/2,例:寄存器相对寻址方式,.386 .model flat, st
9、dcall .data array byte 1,2,3,4,5,6,7 array_end equ $-1 .code start: mov esi, offset array mov al, esi mov al, esi+4 mov esi, array_end mov al, esi-4 ret ;返回操作系统 end start ;汇编结束,19,2019/9/2,19,2019/9/2,例:mov esi, offset array,直接 寻址,array的地址,20,2019/9/2,20,2019/9/2,例:mov al, esi,寄存器间接寻址,esi=00404000,地
10、址00404000的内容,21,2019/9/2,21,2019/9/2,例:mov al, esi+4,寄存器相对寻址esi+4=00404004,esi=00404000,00404004=05h,22,2019/9/2,22,2019/9/2,例:mov esi, array_end,直接寻址,array_end equ $-1 ;$=00404007 ;array_end=00404007-1 =00404006,23,2019/9/2,23,2019/9/2,例:mov al,esi-4,寄存器相对寻址 esi-4=00404002,00404002=03h,esi=00404006
11、,24,2019/9/2,基址变址寻址方式,基址变址寻址方式的操作数的有效地址是基址寄存器的内容加上变址寄存器内容构成 操作数的有效地址的计算公式是:,有效地址基址寄存器+变址寄存器,25,2019/9/2,例:基址变址寻址方式,.386 .model flat, stdcall .data array1 byte 1,2,3,4,5,6,7 array2 byte 8,9,10,11,12,13,14 array_end equ $-1 .code start: mov ebx, offset array1 mov esi,1 mov al, ebx+esi ;也可以写成 mov al, e
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Win32 汇编语言 寻址 方式
链接地址:https://www.31doc.com/p-3485513.html