Win32汇编语言-寻址方式_第1页
Win32汇编语言-寻址方式_第2页
Win32汇编语言-寻址方式_第3页
Win32汇编语言-寻址方式_第4页
Win32汇编语言-寻址方式_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

1、Win32汇编语言汇编语言-寻址方式寻址方式 Win32汇编语言汇编语言-寻址方式寻址方式 2 2 2021-6-25 寻址方式寻址方式 n操作数的寻址方式操作数的寻址方式 立即数寻址立即数寻址 寄存器寻址寄存器寻址 存储器寻址存储器寻址 n直接寻址直接寻址 n间接寻址间接寻址 Win32汇编语言汇编语言-寻址方式寻址方式 3 3 2021-6-25 立即数寻址立即数寻址 n操作数在指令中给出操作数在指令中给出 指令格式:指令格式: MOV AL, 5 MOV AX, 3064H MOV AL, A n只能用于只能用于 SRC 字段字段 MOV 40H, AL nSRC 和和 DST 的字长一

2、致的字长一致 MOV AH, 3064H Win32汇编语言汇编语言-寻址方式寻址方式 4 4 2021-6-25 寄存器寻址寄存器寻址 n操作数存放在操作数存放在CPUCPU的内部寄存器的内部寄存器regreg中中: 8位寄存器位寄存器r8:AH/AL/BH/BL/CH/CL/DH/DL 16位寄存器位寄存器r16:AX/BX/CX/DX/SI/DI/BP/SP 32位寄存器位寄存器r32: EAX/EBX/ECX/EDX/ESI/EDI/ESP/EBP 4个段寄存器个段寄存器seg中:中:CS/DS/SS/ES n指令格式:指令格式:MOV AX, BX MOV AL, BH MOV AX

3、, 3064H SRC 和和 DST 的字长一致的字长一致 MOV AH, BX Win32汇编语言汇编语言-寻址方式寻址方式 5 5 2021-6-25 存储器寻址(直接寻址)存储器寻址(直接寻址) n寻址主存中存储的操作数就称为存储器寻寻址主存中存储的操作数就称为存储器寻 址方式(也称为内存寻址方式)址方式(也称为内存寻址方式) 指令中给出的是指令中给出的是 指令中主存操作数给出的地址只是偏移地址指令中主存操作数给出的地址只是偏移地址 (称有效地址(称有效地址EA) 实模式下,段基地址在默认的段寄存器中或实模式下,段基地址在默认的段寄存器中或 用段超越前缀指定的段寄存器中用段超越前缀指定的

4、段寄存器中 Win32汇编语言汇编语言-寻址方式寻址方式 6 6 2021-6-25 有效地址的组成有效地址的组成 n位移量:存放在指令中的位移量:存放在指令中的8位、位、16位或位或32位的数位的数 值或常量值或常量 n基址:存放在基址寄存器中的内容。它是有效地基址:存放在基址寄存器中的内容。它是有效地 址中的基址部分;址中的基址部分; n变址:是存放在变址寄存器中的内容变址:是存放在变址寄存器中的内容 n比例因子:可以是比例因子:可以是1248 比例因子只适用于保护模式。比例因子只适用于保护模式。 Win32汇编语言汇编语言-寻址方式寻址方式 7 7 2021-6-25 1616位存储器寻

5、址有效地址位存储器寻址有效地址 1616位有效地址基址寄存器变址寄存器位有效地址基址寄存器变址寄存器816816位位移量位位移量 其中:其中: 基址寄存器只能是基址寄存器只能是BX或或BP 变址寄存器只能是变址寄存器只能是SI或或DI 位移量可以是位移量可以是8/16位数位数 当基址寄存器为当基址寄存器为BP的时候,默认的堆栈段寄存器的时候,默认的堆栈段寄存器 SS;其他情况下,默认数据段寄存器;其他情况下,默认数据段寄存器DS。 Win32汇编语言汇编语言-寻址方式寻址方式 8 8 2021-6-25 3232位存储器寻址有效地址位存储器寻址有效地址 其中:其中: 位移量是位移量是8/16/

6、32数值或者常量数值或者常量 任何任何32位通用寄存器都可以作为基址寄存器(默位通用寄存器都可以作为基址寄存器(默 认认ESP/EBP使用使用SS;其他默认使用;其他默认使用DS) 任何除任何除ESP之外的之外的32位通用寄存器都可以作为变位通用寄存器都可以作为变 址寄存器址寄存器 3232位有效地址基址寄存器变址寄存器位有效地址基址寄存器变址寄存器8/16/328/16/32位位移量位位移量 Win32汇编语言汇编语言-寻址方式寻址方式 9 9 2021-6-25 直接寻址方式直接寻址方式 例例:MOV AX, 2000H EA=2000H, 假设假设(DS)=3000H, 那么那么PA=3

7、2000H 50 30 32000 AH AL 3050 (AX) = 3050H 隐含的段为数据段隐含的段为数据段 DS Win32汇编语言汇编语言-寻址方式寻址方式 1010 2021-6-25 直接寻址方式直接寻址方式 n可使用段跨越前缀可使用段跨越前缀 MOV AX, ES: 2000H n操作数地址可由变量(符号地址)表示操作数地址可由变量(符号地址)表示, 但要注意但要注意 VALUE DB 10 变量的属性变量的属性 MOV AH, VALUE ; 等价于等价于 MOV AH, VALUE 可用符号地址代替数值地址可用符号地址代替数值地址 MOV AX, VALUE MOV AX

8、, WORD PTR VALUE 操作数尺寸要一致操作数尺寸要一致 Win32汇编语言汇编语言-寻址方式寻址方式 1111 2021-6-25 间接寻址间接寻址 / 间接操作数间接操作数 n操作数的有效地址存放在寄存器中操作数的有效地址存放在寄存器中 方括号括起来的方括号括起来的寄存器寄存器,如,如BX,SS:EBX n保护模式:保护模式:32位通用寄存器位通用寄存器 n实地址:实地址:16位,位,SI,DI,BX,BP 寄存器里存放着数据的偏移地址寄存器里存放着数据的偏移地址 用作间接操作数的寄存器使用时应先初始化用作间接操作数的寄存器使用时应先初始化 .data var1 BYTE 10h

9、, 20h, 30h .code MOV esi, offset var1 MOV al, esi; 如在附加段中,如在附加段中, MOV al, ES:esi Win32汇编语言汇编语言-寻址方式寻址方式 1212 2021-6-25 尺寸问题尺寸问题 nPTR:与间接操作数的联合使用:与间接操作数的联合使用 nPTR操作符指明操作数的大小操作符指明操作数的大小 .data var1 BYTE 10h, 20h, 30h .code MOV esi, offset var1 INC esi ; , operand must have size .data var1 BYTE 10h, 20h

10、, 30h .code MOV esi, offset var1 INC BYTE PTR esi Win32汇编语言汇编语言-寻址方式寻址方式 1313 2021-6-25 数组求和数组求和 .386 .model flat, stdcall .data W1 WORD 1234h, 5678h, 4321h, 8765h .code mov esi, offset W1 mov ax, esi; 1234h add esi, 2 add ax, esi; 1234h + 5678h add esi, 2 add ax, esi; 1234h + 5678h + 4321h add esi,

11、 2 add ax, esi; 1234h + 5678h + 4321h + 8765h Win32汇编语言汇编语言-寻址方式寻址方式 1414 2021-6-25 例:寄存器间接寻址方式例:寄存器间接寻址方式 .386.386 .model flat, stdcall .model flat, stdcall .data .data d_var dword 12345678h d_var dword 12345678h .code .code start:start: mov esi, offset d_var mov esi, offset d_var mov eax, esi mov

12、eax, esi mov eax, esi mov eax, esi mov eax, offset c_var mov eax, offset c_var mov eax, cs:eax mov eax, cs:eax ret ret; ;返回操作系统返回操作系统 c_var dword 87654321hc_var dword 87654321h end start end start; ;汇编结束汇编结束 Win32汇编语言汇编语言-寻址方式寻址方式 1515 2021-6-25 例:运行结果例:运行结果(1)(1) mov esi, offset d_var ESI mov eax,

13、esi 12 34 56 78 地址地址内容内容 12 34 56 78 EAX 12 34 56 78 Win32汇编语言汇编语言-寻址方式寻址方式 1616 2021-6-25 例:运行结果例:运行结果(2)(2) mov eax, offset c_varEAX mov eax, cs:eax 87 65 43 21 地址地址内容内容 87 65 43 21 EAX 87 65 43 21 mov eax, esi EAX 00404000 Win32汇编语言汇编语言-寻址方式寻址方式 1717 2021-6-25 寄存器相对寻址方式寄存器相对寻址方式 n采用寄存器间接寻址的操作数的有效

14、地采用寄存器间接寻址的操作数的有效地 址是址是 n操作数的有效地址的计算公式是:操作数的有效地址的计算公式是: n位移量可以是正数,也可以是负数位移量可以是正数,也可以是负数 有效地址寄存器有效地址寄存器+8/16/32位位移量位位移量 Win32汇编语言汇编语言-寻址方式寻址方式 1818 2021-6-25 例:寄存器相对寻址方式例:寄存器相对寻址方式 .386 .model flat, stdcall .data array byte 1,2,3,4,5,6,7 array_end equ $-1 .code start: mov esi, offset array mov al, es

15、i mov al, esi+4 mov esi, array_end mov al, esi-4 ret ;返回操作系统返回操作系统 end start;汇编结束汇编结束 Win32汇编语言汇编语言-寻址方式寻址方式 1919 2021-6-25 19 2021-6-25 例:例:mov esi, offset arraymov esi, offset array 直接直接 寻址寻址 array的的 地址地址 Win32汇编语言汇编语言-寻址方式寻址方式 2020 2021-6-25 20 2021-6-25 例:例:mov al, esimov al, esi 寄存器间接寄存器间接 寻址寻址

16、 esi=00404000 地址的内容地址的内容 Win32汇编语言汇编语言-寻址方式寻址方式 2121 2021-6-25 21 2021-6-25 例:例:mov al, esi+4mov al, esi+4 寄存器相对寻址寄存器相对寻址 esi+4=00404004 esi=00404000 00404004=05h Win32汇编语言汇编语言-寻址方式寻址方式 2222 2021-6-25 22 2021-6-25 例:例:mov esi, array_endmov esi, array_end 直接寻址直接寻址 array_end equ $-1 ;$=00404007 ;array

17、_end=00404007-1 =00404006 Win32汇编语言汇编语言-寻址方式寻址方式 2323 2021-6-25 23 2021-6-25 例:例:mov al,esi-4mov al,esi-4 寄存器相对寻址寄存器相对寻址 esi-4=00404002 00404002=03h esi=00404006 Win32汇编语言汇编语言-寻址方式寻址方式 2424 2021-6-25 基址变址寻址方式基址变址寻址方式 n基址变址寻址方式的操作数的有效地址基址变址寻址方式的操作数的有效地址 是是 构成构成 n操作数的有效地址的计算公式是:操作数的有效地址的计算公式是: 有效地址有效地

18、址基址寄存器基址寄存器+变址寄存器变址寄存器 Win32汇编语言汇编语言-寻址方式寻址方式 2525 2021-6-25 例:基址变址寻址方式例:基址变址寻址方式 .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, ebxesi mov ebx, offset array

19、2 mov al, ebx+esi ret;返回操作系统返回操作系统 end start;汇编结束汇编结束 Win32汇编语言汇编语言-寻址方式寻址方式 2626 2021-6-25 26 2021-6-25 例:例:mov ebx, offset array1mov ebx, offset array1 直接寻直接寻 址址 array1 的地址的地址 Win32汇编语言汇编语言-寻址方式寻址方式 2727 2021-6-25 27 2021-6-25 例:例: mov esi,1mov esi,1 Win32汇编语言汇编语言-寻址方式寻址方式 2828 2021-6-25 28 2021-6

20、-25 例:例: mov al, ebx+esimov al, ebx+esi 基址变址寻址基址变址寻址 esi+ebx=00404001 00404001=02h Win32汇编语言汇编语言-寻址方式寻址方式 2929 2021-6-25 29 2021-6-25 例:例:mov ebx, offset array2mov ebx, offset array2 直接直接 寻址寻址 array2 的地址的地址 Win32汇编语言汇编语言-寻址方式寻址方式 3030 2021-6-25 30 2021-6-25 例:例: mov al, ebx+esi 基址变址寻址基址变址寻址 esi+ebx=

21、00404008 00404008=09h Win32汇编语言汇编语言-寻址方式寻址方式 3131 2021-6-25 相对基址变址寻址方式相对基址变址寻址方式 n相对基址变址寻址方式的操作数有效地址相对基址变址寻址方式的操作数有效地址 是是 构成构成 n操作数的有效地址的计算公式是:操作数的有效地址的计算公式是: 有效地址基址寄存器有效地址基址寄存器+变址寄存器变址寄存器+8/16/32位位移量位位移量 Win32汇编语言汇编语言-寻址方式寻址方式 3232 2021-6-25 例例:相对基址变址寻址:相对基址变址寻址 .386 .model flat, stdcall .data arra

22、y byte 1,2,3,4,5,6,7 byte 8,9,10,11,12,13,14 byte 15,16,17,18,19,20,21 numcols equ 7 n equ 2 .code start: mov ebx, numcols mov esi,1 mov al, arrayebxesi ret;返回操作系统返回操作系统 end start;汇编结束汇编结束 Win32汇编语言汇编语言-寻址方式寻址方式 3333 2021-6-25 例:例:mov ebx, numcols mov esi, 1 Win32汇编语言汇编语言-寻址方式寻址方式 3434 2021-6-25 例:例

23、:mov al, arrayebxesi 基址变址寻址基址变址寻址 00404000+7+ 1 =00404008 00404008=09h array的地址的地址 Win32汇编语言汇编语言-寻址方式寻址方式 3535 2021-6-25 比例因子寻址方式比例因子寻址方式 n仅用于仅用于32位应用程序位应用程序 n操作数的有效地址是由操作数的有效地址是由 n计算公式为:计算公式为: n比例因子寻址方式中可以没有基址寄存器和位移比例因子寻址方式中可以没有基址寄存器和位移 量,比例数只能是量,比例数只能是1,2,4,8这四种取值之一这四种取值之一 有效地址有效地址=基址寄存器基址寄存器+(变址寄

24、存器变址寄存器)比例因子比例因子+位移量位移量 Win32汇编语言汇编语言-寻址方式寻址方式 3636 2021-6-25 例例:比例因子寻址方式比例因子寻址方式 .386 .model flat, stdcall .data array word 1,2,3,4,5,6,7 word 8,9,10,11,12,13,14 word 15,16,17,18,19,20,21 row equ 72 n equ 2 .code start: mov ebx, row mov esi,1 mov ax, arrayebxesi*2 ;也可以写成;也可以写成mov ax, array+ebx+esi*

25、2 ret;返回操作系统返回操作系统 end start;汇编结束汇编结束 Win32汇编语言汇编语言-寻址方式寻址方式 3737 2021-6-25 例:例:mov ebx, row Win32汇编语言汇编语言-寻址方式寻址方式 3838 2021-6-25 例:例: mov esi,1 Win32汇编语言汇编语言-寻址方式寻址方式 3939 2021-6-25 mov ax, arrayebxesi*2 比例因子寻址比例因子寻址 00404000+14+1*2 =00404010 00404010=09h array的地址的地址 Win32汇编语言汇编语言-寻址方式寻址方式 4040 20

26、21-6-25 操作数寻址方式的组合操作数寻址方式的组合 n操作数寻址方式在指令中并不是任意组合的,是有一定规操作数寻址方式在指令中并不是任意组合的,是有一定规 律的律的 n大多数指令(常用的数据传送、加减运算、逻辑运算等指大多数指令(常用的数据传送、加减运算、逻辑运算等指 令)都支持如下组合:令)都支持如下组合: 。 指令助记符指令助记符 reg,imm/reg/mem 指令助记符指令助记符 mem,imm/reg Win32汇编语言汇编语言-寻址方式寻址方式 4141 2021-6-25 练习:练习: n假定实模式下,假定实模式下,(DS)=2000H,(ES)=2100H, (SS)=1

27、500H,(SI)=00A0H,(BX)=0100H,(BP)=0010H, 数据段中变量名数据段中变量名VAL的偏移地址为的偏移地址为0050H,试指出下列源,试指出下列源 操作数字段的寻址方式是什么?其物理地址值是多少?操作数字段的寻址方式是什么?其物理地址值是多少? (1) MOV AX, 0ABH (2) MOV AX, BX (3) MOV AX, 100H (4) MOV AX, VAL (5) MOV AX, BX (6) MOV AX, ES:BX (7) MOV AX, BP (8) MOV AX, SI (9) MOV AX, BX+10 (10) MOV AX, VALB

28、X (11) MOV AX, BXSI (12) MOV AX, VALBXSI Win32汇编语言汇编语言-寻址方式寻址方式 4242 2021-6-25 转移地址寻址方式转移地址寻址方式 n汇编程序的执行顺序是由代码段寄存器汇编程序的执行顺序是由代码段寄存器 CS和指令指针和指令指针EIP的内容决定的。的内容决定的。 n程序转移指令通过改变程序转移指令通过改变EIP和和CS的内容,的内容, 就可以改变程序的正常执行顺序。就可以改变程序的正常执行顺序。 Win32汇编语言汇编语言-寻址方式寻址方式 4343 2021-6-25 JMP指令指令 nJMP指令是无条件转移指令,其格式为:指令是无

29、条件转移指令,其格式为: nJMP指令中的操作数指令中的操作数label是要转移到的目是要转移到的目 标地址,也称为目的地址、转移地址。标地址,也称为目的地址、转移地址。 JMP label ;程序转向程序转向label标号指定的地址标号指定的地址 Win32汇编语言汇编语言-寻址方式寻址方式 4444 2021-6-25 转移地址寻址转移地址寻址 n直接寻址直接寻址 转移地址直接包含在指令的机器代码中就是直转移地址直接包含在指令的机器代码中就是直 接寻址方式。接寻址方式。 n间接寻址间接寻址 转移地址如果存放在寄存器或主存单元中,就转移地址如果存放在寄存器或主存单元中,就 是间接寻址方式。是

30、间接寻址方式。 用寄存器或存储器用寄存器或存储器 操作数表达操作数表达 用标号表达用标号表达 Win32汇编语言汇编语言-寻址方式寻址方式 4545 2021-6-25 转移距离转移距离 n段内转移段内转移 指在当前代码段范围内转移,因此不需要更改指在当前代码段范围内转移,因此不需要更改 CS段地址,只要改变段地址,只要改变EIP偏移地址。偏移地址。 n段间转移段间转移 指从当前代码段跳转到另一个代码段,此时需指从当前代码段跳转到另一个代码段,此时需 要更改要更改CS段地址和段地址和EIP偏移地址。偏移地址。 Win32汇编语言汇编语言-寻址方式寻址方式 4646 2021-6-25 转移地址

31、的寻址方式转移地址的寻址方式 n段内直接寻址段内直接寻址 n段内间接寻址段内间接寻址 n段间直接寻址段间直接寻址 n段间间接寻址段间间接寻址 Win32汇编语言汇编语言-寻址方式寻址方式 4747 2021-6-25 段内直接寻址段内直接寻址 n指令中直接写出目标地址的标号,而在对指令中直接写出目标地址的标号,而在对 应的机器码中,包含位移量的补码形式。应的机器码中,包含位移量的补码形式。 n位移量位移量-紧接着紧接着JMP指令后的那条指令的指令后的那条指令的 偏移地址到目标指令的偏移地址的地址位偏移地址到目标指令的偏移地址的地址位 移。移。 n当向地址增大方向转移时,位移量为正;当向地址增大

32、方向转移时,位移量为正; n向地址减小方向转移时,位移量为负。向地址减小方向转移时,位移量为负。 Win32汇编语言汇编语言-寻址方式寻址方式 4848 2021-6-25 相对转移相对转移 n段内直接寻址也叫作相对转移段内直接寻址也叫作相对转移 n相对转移目的地址的计算公式为:相对转移目的地址的计算公式为: 目的地址目的地址=当前当前EIP+位移量位移量(8bit/16bit/32bit) 近转移:位移量为近转移:位移量为8位位 段转移:位移量为段转移:位移量为32位位 Win32汇编语言汇编语言-寻址方式寻址方式 4949 2021-6-25 例例:段内直接寻址:段内直接寻址 .386 .model flat, stdc

温馨提示

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

评论

0/150

提交评论