一、常用指令:MOV指令、ADD指令、SUB指令、AND指令、OR指令、XOR指令、NOT指令
MOV 的语法:
MOV r/mX,rX r 通用寄存器,X 表示位数可以8、16、32
MOV rX,r/mX m 代表内存
MOV rX, immX imm 代表立即数
1、源操作数可以是立即数、通用寄存器、段寄存器、或者内存单元.
2、目标操作数可以是通用寄存器、段寄存器或者内存单元.
3、操作数的宽度必须一样.
4、源操作数和目标操作数不能同时为内存单元.
mov dword ptr ds:[0x0012FF34],0x12345678 的含义:
dword :要读/写多少此时是4字节 byte == 1字节 word == 2字节
ptr: Point 代表后面是一个指针 (指针的意思就是里面存的不是普通的值,而是个地址)
ds:段寄存器
0x0012FF34:内存编号,必须是32位的 前面0可以省略
注意:地址编号不要随便写,因为内存是有保护的,并不是所有的内存都可以直接读写(需要特别处理)
ADC指令:带进位加法
格式:ADC R/M,R/M/IMM 两边不能同时为内存 宽度要一样
SBB指令:带借位减法
格式同上;
XCHG指令:交换数据
格式同上;
MOVS指令:移动数据 内存-内存
MOVS BYTE|WORD|DWORD PTR ES:[EDI],BYTE PTR DS:[ESI]
STOS指令:讲Al/AX/EAX的值存储到[EDI]指定的内存单元
STOS BYTEBYTE|WORD|DWORD PTR ES:[EDI]
REP指令:按计数寄存器 (ECX) 中指定的次数重复执行字符串指令
MOVSX 先符号扩展,再传送
MOV AL,80
MOVSX CX,AL
MOVZX 先零扩展,再传送.
MOV AL,80
MOVSX CX,AL
二、寄存器与内存区别:
1、寄存器位于CPU内部,执行速度快,但比较贵。
2、内存速度相对较慢,但成本较低,所以可以做的很大
3、寄存器和内存没有本质区别,都是用于存储数据的容器,都是定宽的。
4、寄存器常用的有8个:EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI。
5、计算机中的几个常用计量单位:BYTE WORD DWORD
我们称计算机CPU是32位或者64位,主要指的就是内存编号的宽度,而不是寄存器的宽度。计算机内存的每一个字节会有一个编号,就是地址值。
三、寻址方式
寻址公式一:[立即数]
MOV EAX,DWORD PTR DS:[0x13FFC4] ;读取内存的值:
MOV DWORD PTR DS:[0x13FFC4],eax ;MOV DWORD PTR DS:[0x13FFC4],eax
LEA EAX,DWORD PTR DS:[0X13FFC4] ;获取内存编号:实际上就是0X13FFC4
寻址公式二:[reg] reg代表寄存器 可以是8个通用寄存器中的任意一个
同上,只是0x13FFC4 改成 寄存器;MOV EAX,DWORD PTR DS:[ECX]
寻址公式三:[reg+立即数]
MOV EAX,DWORD PTR DS:[ECX+4]
寻址公式四:[reg+reg*{1,2,4,8}]
MOV EDX,DWORD PTR DS:[EAX+ECX*4]
寻址公式五:[reg+reg*{1,2,4,8}+立即数]
MOV EDX,DWORD PTR DS:[EAX+ECX*4+4]