汇编知识

4个数据寄存器(EAX、EBX、ECX和EDX)
2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)
6个段寄存器(ES、CS、SS、DS、FS和GS)
1个指令指针寄存器(EIP) 1个标志寄存器(EFlags)


CMP AX,BX
JZ XX

这两组是AX减BX,如果值为0则跳转到标号为XX的行
其它还有一些:
JZ/JE  相等或为零则跳转
JNZ/JNE 不相等或不为零则跳转
JL/JLE  小于/小于或等于则跳转
JG/JGE  大于/大于或等于则跳转
JMP 无条件跳转


比较语句
CMP AX,BX AX寄存器减去BX寄存器的内容
AND AX,BX AX与BX做“与运算”
OR AX,BX AX与BX做“或运算”
TEST AX,BX 这个与AND AX,BX一样的效果
XOR AX,BX 将AX内容清零

子程式(这个在破解中特别重要),他是主程序的一个分支,一般在发送注册码,比较注册码这些工作都是靠子程式来完成的。
子程式的返回码一般是RET
一般是这个样子的:  CALL 15F:334422


数据操作
MOV AX,BX 数据传送指令,将BX的值传送到AX中
XCHG  AX,BX  AX与BX值互换

还有见得最多的就是算术运算
ADD AX,BX 加法  AX=AX+BX
SUB AX,BX 减法  AX=AX-BX
INC AX 寄存器加1 AX=AX+1
DEC AX 寄存器减1 AX=AX-1
MUL 乘法
DIV 除法

mov ax,bx  意思是 把bx传入到ax里面!

寄存器分别为 AX BX CX DX SI DI SP BP IP CS SS DS ES PSW

AX乘、除运算,字的输入输出,中间结果的缓存 

BX存储器指针 

CX串操作、循环控制的计数器 

DX字的乘、除运算,间接的输入输出 


简单的指令

mov ax,18 将18送入寄存器AX  高级语言 AX=18

mov ah,78 将78送入寄存器AH  高级语言 AH=78

add ax,8   将寄存器AX中的数值加上8  高级语言 AX=AX+8

mov ax,bx   将AXZ和BX中的数值相加,结果存在AX中 高级语言 AX=AX+BX

1KB=1024B

1MB=1024KB

1GB=1024MB

1TB=1024GB








MOV  传送指令
PUSH    入栈指令
POP    出栈指令
XCHG  交换指令
XLAT  换码指令
LEA  有效地址送寄存器指令
LDS( 指针送寄存器和DS指令
LES 指针送寄存器和ES指令
LAHF 标志位送AH指令
SAHF AH送标志寄存器指令
PUSHF  标志进栈指令
POPF  标志出栈指令
ADD    加法指令
ADC    带进位加法指令
INC    加1指令
SUB  不带借位的减法指令
SBB 带借位的减法指令
DEC  减1指领
NEG  求补指令
CMP 比较指令
MUL 无符号数乘法指令
IMUL 有符号数乘法指令
DIV  无符号数除法指令
IDIV  有符号数除法指令
CBW 字节转换为字指令
CWD 字转换为双字指令
DAA  压缩的BCD码加法十进制调整指令
DAS  压缩的BCD码减法十进制调整指令
AAA  非压缩的BCD码加法十进制调整指令
AAS  非压缩的BCD码加法十进制调整指令
AND    逻辑与指令
OR    逻辑或指令
XOR    逻辑异或指令
NOT    逻辑非指令
TEST    测试指令
SHL  逻辑左移指令
SHR  逻辑右移指令
ROL 循环左移指令P58
ROR 循环右移指令P58
RCL 带进位循环左移
RCR带进位循环左移
MOVS串传送指令
STOS 存入串指令
LODS从串取指令
REP 重复操作前
CLD清除方向标志指令
STD设置方向标志指令
CMPS  串比较指令
SCAS 串扫描指令
REPE/REPZ相等/为零时重复操作前缀
REPNE/REPNZ不相等/不为零进重复前缀
IN 输入指令
OUT输出指令
JMP无条件转移指令
JZ,JNZ,JS,JNS,JO,JNO,JP,JNP,JB,JNB,JBE,JNBE,JL,JNL,JLE,JNLE,JCXZ  条件转移指令
LOOP    循环指令P70
LOOPZ/LOOPE  为零/相等时循环指令
LOOPNZ/LOOPNE  不为零/不相等时循环指令
CALL    子程序调用指令
RET程序返回指令
CLC  进位位置0指令
CMC进位位求反指令
SRC进位位置1指令
NOP  无操作指令
HLT 停机指令
OFFSET  返回偏移地址
SEG    返回段地址
EQU(=)  等值语句
PURGE  解除语句
DUP    操作数字段用复制操作符
SEGMENT,ENDS  段定义指令
ASSUME  段地址分配指令
ORG    起始偏移地址设置指令
$    地址计数器的当前值
PROC,ENDP  过程定义语句
NAME,TITLE,END  程序开始结束语句
MACRO,ENDM  宏定义指令

JZ  OPR //结果为零转移 
JNZ  OPR //结果不为零转移 
JS  OPR //结果为负转移 
JNS  OPR //结果为正转移 
JO  OPR //溢出转移
JNO  OPR //不溢出转移 
JP  OPR //结果为偶转移
JNP  OPR //结果为奇转移 
JC  OPR //有进位转移 
JNC  OPR //无进位转移

F2:设置断点,只要在光标定位的位置(上图中灰色条)按F2键即可,再按一次F2键则会删除断点。(相当于 SoftICE 中的 F9) 

F8:单步步过。每按一次这个键执行一条反汇编窗口中的一条指令,遇到 CALL 等子程序不进入其代码。(相当于 SoftICE 中的 F10) 

F7:单步步入。功能同单步步过(F8)类似,区别是遇到 CALL 等子程序时会进入其中,进入后首先会停留在子程序的第一条指令上。(相当于 SoftICE 中的 F8) 

F4:运行到选定位置。作用就是直接运行到光标所在位置处暂停。(相当于 SoftICE 中的 F7) 

F9:运行。按下这个键如果没有设置相应断点的话,被调试的程序将直接开始运行。(相当于 SoftICE 中的 F5) 
原文地址:https://www.cnblogs.com/IMyLife/p/4826255.html