zoukankan      html  css  js  c++  java
  • 汇编知识

    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) 
  • 相关阅读:
    spark-2.0.0与hive-1.2.1整合
    kafka_2.11-0.10.0.0安装步骤
    hive-1.2.1安装步骤
    linux时间编程
    gdb与coredump
    linux下静态库、动态库的创建与使用
    linux常用工具
    js数组、内置对象、自定义对象
    JS学习五(js中的事件)
    JS学习四(BOM DOM)
  • 原文地址:https://www.cnblogs.com/IMyLife/p/4826255.html
Copyright © 2011-2022 走看看