进制转换
容器大小
逻辑运算
寄存器
寄存器 | 主要用途 | 编号 | 存储数据范围
--|--|--|--
EAX | 累加器 | 0 | 0 - 0xFFFFFFFF
ECX | 计数 | 1 | 0 - 0xFFFFFFFF
EDX | I/O指针 | 2 | 0 - 0xFFFFFFFF
EBX | DS段的数据指针 | 3 | 0 - 0xFFFFFFFF
ESP | 堆栈指针 | 4 | 0 - 0xFFFFFFFF
EBP | SS段的数据指针 | 5 | 0 - 0xFFFFFFFF
ESI | 字符串操作的源指针(SS段的数据指针) | 6 | 0 - 0xFFFFFFFF
EDI | 字符串操作的目标指针(ES段的数据指针) | 7 0 - 0xFFFFFFFF
趁手的工具OD下载
汇编常见指令
mov A,B
将源操作数复制存入目标操作数Aadd A,B
将源操作数A加入目标操作数Bsub A,B
将源操作数A减去目标操作数B,并记入Acmp A,B
将源操作数A减去目标操作数B,不记入A(可以用来比较)and A,B
将源操作数A与目标操作数B进行与运算or A,B
将源操作数A与目标操作数B进行或运算xor A,B
将源操作数A与目标操作数B进行异或运算not A
将源操作数A取否adc byte ptr A,B
带进位的加法sbb byte ptr A,B
带借位的减法1. 对于8、9
1. A、B不同时为内存
2. 宽度一样
xchg dword A,B
交换A、Bmovs dword 内存A,内存B
交换A、Bstosb/w/d prt es:[EDI]
将AK/AX/EAX的值存入[EDI]中jmp A
无条件更改EIP的值(跳转)call A
会将返回地址(下一条指令地址)记录至堆栈,更改EIPretn
跳转回EIP内地址(等于POP EIP
)push A
在当前栈顶出写入A(不允许push8位)pop A
在当前栈顶处读取值并将栈顶移动(POP不允许8位)test A,A
检测A是否是01. 对A,B
1. 源操作数可以是立即数.通用寄存器、段寄存器、或者内存单元
2. 目标操作数可以是通用寄存器、段寄存器或者内存单元
3. 操作数的宽度必须一样
4. 源操作数和目标操作数不能同时为内存单元
5. 很多函数不允许源操作数和目标操作数都是内存
MOV EAX,DWARD PTR DS:[A]
从内存[A]向EAX寄存器中存入双字大小的立即数(读取内存)MOV DWARD PTR DS:[A],eax
从EAX寄存器向内存[A]中存入双字大小的立即数(写入内存)LEA EAX,DWORD PTR DS:[A]
取出内存[A]的地址放入EAX中(读取地址编号)PTR DS:[A]
是基址BASE
寄存器和一个TOP
寄存器,都是32位通用寄存器,用来存储内存单位编号MOV
指令,确定栈顶和栈底(先确定栈底后确定栈顶)BASE
存储起始位置编号,TOP
记录终止位置编号TOP
的值减A(A为字节数,默认为4)TOP
的值加4(A为字节数,默认为4)TOP
或BASE
加上偏移的方式去读取BASE
永远不变临时存储大量数据,便于查找
MOV DOWRD PTR DS:[reg],B(立即数)
SUB [reg],4
或者LEA [reg],DWORD PTR DS:[[reg]-4]
PUSH A
在当前栈顶出写入A(不允许push8位)PUSHAD
将8个通用寄存器的值存入堆栈MOV [reg1],DEORD PTR DS:[reg2]
(reg是栈底或栈顶)POP A
在当前栈顶处读取值并将栈顶移动(POP不允许8位)POPAD
保存堆栈,还原堆栈CF(Carry Flag)
无符号运算时的最高位产生进位或者借位时,其值改为1,否则为0PF(Parity Flag)
用于反映运算结果中1的个数的奇偶性(只检查最低有效字节,即最后8位)AF(Auxilizry Carry Flag)
发生如下两项之一时,变为1ZF(Zero Flag)
用于反映运算结果是否为零SF(Sign Flag)
用于运算结果的符号位,最高位是什么值,就存什么值OF(Overflow Flag)
用于反映有符号所有运算结果是否溢出,溢出则为1,否则是0(检测原理:符号位进位 == 1
XOR 最高有效位进位 == 1
== 1时,OF位 == 1)DF(Direction Flag)
加是0,减是1je A
如果ZF位为1则跳转到Ajne A0
如果ZF位为0则跳转到Ajs A
如果SF位为1则跳转到Ajns A0
如果SF位为0则跳转到Ajp A
如果PF位为1则跳转到Ajnp A0
如果PF位为0则跳转到Ajo A
如果OF位为1则跳转到Ajno A
如果OF位为0则跳转到Ajb A
如果CF位为1(无符号小于)则跳转到Aje A
如果CF位为0(无符号大于等于)则跳转到Ajbe A
如果CF位为1 or ZF位为1(无符号数小于等于)则跳转到Ajnbe A
如果CF位为0 and ZF位为1(无符号数大于)则跳转到Ajl A
如果SF位不等于OF位(有符号小于)则跳转到Ajnl A
如果SF位等于OF位(有符号大于等于)则跳转到Ajle A
如果SF位不等于OF位 or ZF位为1(有符号数小于等于)则跳转到Ajnle A
如果SF位等于OF位 and ZF位为0(有符号数大于)则跳转到Arep stos dword ptr es:[EDI]
用EDI内数据填入栈,重复[ECX]次
全部评论 (暂无评论)
info 还没有任何评论,你来说两句呐!