0x01 常用指令
在传送指令中常用的有 mov、push、pop、lea 这四个指令
0x02 mov 指令
mov 指令是最常见的传送指令,基本格式为:
mov dst src ;dst 表示传送内容的目标 ,src 表示传送内容的来源
;dst 可以是寄存器、存储器
;src 可以是寄存器、存储器、立即数
;段寄存不可以直接使用 mov 指令传送如:mov ds 5、mov ds eax;两者均不可以
0x03 push/pop
push/pop 是出入栈时常用的指令,基本格式为:
push src ;将 src 中的数据压入栈中
pop src ;将栈中的数据取出存入 src中
;src 可以是寄存器、存储器
0x04 lea 指令
lea (load effective address),意思就是装载有效地址,lea 指令将一个近地址指针存入指定寄存器。其容易与 mov 指令作用相混淆。
lea 指令将会将地址存入,而 mov 将数据存入
char *s = "hello world"; __asm{ lea eax, s ;将指针 s 的地址存入 eax 中 mov ebx, s ;将指针 s 的值即字符串地址存入 ebx 中 lea eax, [s] ;将指针 s 的地址存入 eax 中 mov ebx, [s] ;将指针 s 的值即字符串地址存入 ebx 中 //lea eax, 400000h ;操作数错误 mov ebx, 400000h ;将 00400000 存入eax //lea eax, [400000] ;操作数错误 mov ebx, [00400000] ;将 00400000 存入eax lea eax [eax + ebx*2 +1] ;[] 内计算结果赋给 eax //mov eax eax + ebx*2 +1 ;报错 mov eax [eax + ebx*2 +1] ;将 []内结果当作地址取出地址上的内容赋给eax }