004-MOV指令的寻址方式
2016-09-10 23:07
239 查看
l
立即寻址
l
寄存器寻址
l
寄存器间接寻址
l
直接寻址方式
l
直接寻址方式
l
寄存器相对寻址
一、了解指令常用寻址方式
寻址方式就是寻找操作数或操作数地址的方式。
寄存器是中央处理器内的组成部分。寄存器是一组容量有限的高速存贮部件,它们可用来暂存指令、数据和位址。(DWORD)
MOV EAX,0x1234 //立即寻址
MOV EAX,EBX //寄存器寻址
数据寄存器,一般称之为通用寄存器组
通用寄存器有4个 EAX,EBX,ECX,EDX
MOV EAX,[EBX] //寄存器间接寻址
MOV EAX,v //v是一个变量名
MOV EAX,[1234] //直接寻址方式
MOV EAX,[EBX+1234] //寄存器相对寻址
二、理解寻址
上边的名字看起来很多,总结起来也就2种方式:
带[]与不带[]
1、不带括号的
有立即数与寄存器
2、带括号的就是指针,从地址里边取值出来。
MOV EAX,0x1234 //立即寻址 eax=0x1234;
MOV EAX,EBX //寄存器寻址 eax=ebx
MOV EAX,[EBX] //寄存器间接寻址 eax=*(int*)ebx;
MOV EAX,v //v是一个变量名 eax=v; //被编译后
一般会呈后边两种形式
MOV EAX,[1234] //直接寻址方式 eax=*(int*)(0x1234)
MOV EAX,[EBX+1234] //
寄存器相对寻址 eax=*(int*)((int)ebx+1234); //这里的1234称为偏移,EBX是基址
三、对调位置
MOV EAX,0x1234 //立即数不能出现在MOV指令左边。如:
MOV 0x1234,EAX 这是错的写法
后边的都可以对换位置
MOV EAX,EBX //寄存器寻址 eax=ebx mov
ebx,eax
MOV EAX,[EBX] //寄存器间接寻址 eax=*(int*)ebx; mov
[ebx],eax
MOV EAX,v //v是一个变量名 eax=v;
mov v,eax
MOV EAX,[1234] //直接寻址方式 eax=*(int*)(0x1234)
mov [1234],eax
MOV EAX,[EBX+1234] //
寄存器相对寻址 eax=*(int*)((int)ebx+1234)
mov [ebx+1234],eax
四、代码测试
int *da=a;//int
a[0x10]={0,1,2,3,4,5,6,7,8,9,0xA,0xB,0xC,0xd,0xe};
//提示
在命令栏中用
dd 地址表达式
可以以DWORD 4字节格式显示指定地址的数据
__asm
{
mov
eax,0x1111
mov
ebx,eax
mov
ebx,bbb //全局变量bbb
mov
ebx,da
//取数组基址
mov
eax,[da+4]
mov
eax,[ebx+4]
}
//下边指令,前边是寄存器相对寻址,后边是立即寻址
0040105A |. C745 FC 20304>MOV DWORD PTR SS:[EBP-4],001_MOV.00403020 ; int *da=a //a是数组的地址
00401061 |. B8 11110000 MOV EAX,1111 ; eax=0x1111
立即寻址
00401066 |. 8BD8 MOV EBX,EAX ; mov ebx,0x1111-->ebx=0x1111 //寄存器寻址
00401068 |. 8B1D 18304000 MOV EBX,DWORD PTR DS:[403018] ; mov ebx,008899FF-->ebx=009988FF
直接寻址
0040106E |. 8B5D FC MOV EBX,DWORD PTR SS:[EBP-4] ; mov ebx,da
寄存器
相对寻址
00401071 |. 8B45 00 MOV EAX,DWORD PTR SS:[EBP] //寄存器间接寻址
00401074 |. 8B43 04 MOV EAX,DWORD PTR DS:[EBX+4] ; eax=da[1]=1
寄存器
相对寻址
立即寻址
l
寄存器寻址
l
寄存器间接寻址
l
直接寻址方式
l
直接寻址方式
l
寄存器相对寻址
一、了解指令常用寻址方式
寻址方式就是寻找操作数或操作数地址的方式。
寄存器是中央处理器内的组成部分。寄存器是一组容量有限的高速存贮部件,它们可用来暂存指令、数据和位址。(DWORD)
MOV EAX,0x1234 //立即寻址
MOV EAX,EBX //寄存器寻址
数据寄存器,一般称之为通用寄存器组
通用寄存器有4个 EAX,EBX,ECX,EDX
MOV EAX,[EBX] //寄存器间接寻址
MOV EAX,v //v是一个变量名
MOV EAX,[1234] //直接寻址方式
MOV EAX,[EBX+1234] //寄存器相对寻址
二、理解寻址
上边的名字看起来很多,总结起来也就2种方式:
带[]与不带[]
1、不带括号的
有立即数与寄存器
2、带括号的就是指针,从地址里边取值出来。
MOV EAX,0x1234 //立即寻址 eax=0x1234;
MOV EAX,EBX //寄存器寻址 eax=ebx
MOV EAX,[EBX] //寄存器间接寻址 eax=*(int*)ebx;
MOV EAX,v //v是一个变量名 eax=v; //被编译后
一般会呈后边两种形式
MOV EAX,[1234] //直接寻址方式 eax=*(int*)(0x1234)
MOV EAX,[EBX+1234] //
寄存器相对寻址 eax=*(int*)((int)ebx+1234); //这里的1234称为偏移,EBX是基址
三、对调位置
MOV EAX,0x1234 //立即数不能出现在MOV指令左边。如:
MOV 0x1234,EAX 这是错的写法
后边的都可以对换位置
MOV EAX,EBX //寄存器寻址 eax=ebx mov
ebx,eax
MOV EAX,[EBX] //寄存器间接寻址 eax=*(int*)ebx; mov
[ebx],eax
MOV EAX,v //v是一个变量名 eax=v;
mov v,eax
MOV EAX,[1234] //直接寻址方式 eax=*(int*)(0x1234)
mov [1234],eax
MOV EAX,[EBX+1234] //
寄存器相对寻址 eax=*(int*)((int)ebx+1234)
mov [ebx+1234],eax
四、代码测试
int *da=a;//int
a[0x10]={0,1,2,3,4,5,6,7,8,9,0xA,0xB,0xC,0xd,0xe};
//提示
在命令栏中用
dd 地址表达式
可以以DWORD 4字节格式显示指定地址的数据
__asm
{
mov
eax,0x1111
mov
ebx,eax
mov
ebx,bbb //全局变量bbb
mov
ebx,da
//取数组基址
mov
eax,[da+4]
mov
eax,[ebx+4]
}
//下边指令,前边是寄存器相对寻址,后边是立即寻址
0040105A |. C745 FC 20304>MOV DWORD PTR SS:[EBP-4],001_MOV.00403020 ; int *da=a //a是数组的地址
00401061 |. B8 11110000 MOV EAX,1111 ; eax=0x1111
立即寻址
00401066 |. 8BD8 MOV EBX,EAX ; mov ebx,0x1111-->ebx=0x1111 //寄存器寻址
00401068 |. 8B1D 18304000 MOV EBX,DWORD PTR DS:[403018] ; mov ebx,008899FF-->ebx=009988FF
直接寻址
0040106E |. 8B5D FC MOV EBX,DWORD PTR SS:[EBP-4] ; mov ebx,da
寄存器
相对寻址
00401071 |. 8B45 00 MOV EAX,DWORD PTR SS:[EBP] //寄存器间接寻址
00401074 |. 8B43 04 MOV EAX,DWORD PTR DS:[EBX+4] ; eax=da[1]=1
寄存器
相对寻址
相关文章推荐
- ARM指令寻址方式
- 51汇编----寻址方式和伪指令
- 指令“LDMIA R01, {R1,R2,R3,R4}”的寻址方式?
- 8086/8088指令寻址方式和汇编指令总结
- ARM指令的寻址方式
- ARM处理器的三级流水线和ARM指令及寻址方式
- ARM指令的寻址方式
- ARM 指令的寻址方式
- ARM (二) arm指令分类及其寻址方式
- 指令及操作数的寻址方式
- ARM 汇编指令学习:[1]ARM指令寻址方式
- ARM汇编编程基础之三 —— 基本寻址方式与基本指令
- 为什么X86汇编中的mov指令不支持内存到内存的寻址?
- ARM寻址方式及相关指令汇总
- 8051单片机指令和寻址方式
- 8086汇编学习之寻址方式、数据类型以及几个数据操作指令
- 符号指令的寻址方式
- 汇编语言——寻址方式的综合应用及转移指令的原理
- ARM汇编编程基础(二) -- 基本寻址方式与基本指令
- 组成原理之指令寻址方式和操作数寻址方式图示