• 汇编总结


    相关教程文件链接:http://www.kipirvine.com/asm/

    OF:溢出标志位  (与0做或运算,清0)

    UP:方向标志位

    EI:终端标志位

    SF:符号标志位

    ZF:零标志位

    AF:辅助进位标志位

    PF:奇偶标志位

    CY:进位标志位  (stc进位置1,clc进位清0)

    寄存器:

    CS:CODE Segment 代码段寄存器

    SS:Stack Segment 栈段寄存器

    DS:Data Segment 数据段寄存器

    ES:Extra(Data) Segment 附加(数据)段寄存器

    FS:Data Segment 数据段寄存器

    GS:Data Segment 数据段寄存器

    ES、FS、GS寄存器用来存放附加数据段的段基址 

    程序调试中会经常用到FS寄存器,它会用于计算SEH(Structured Exception Handler,结构化异常处理机制)、TEB(Thread Environment Block,线程环境块)、PEB(Process Enviroment Block,进程环境块)等地址 

    $符号代表当前指令所在段的偏移量,例如eg:指令“jmp $+3”中的“$”表示当前这条指令在代码段中的偏移量。

    ::表示声明全局变量

    ※ret指令:ret强制CPU返回到该过程(也就是高级语言里的函数或方法)被调用的位置

    ※call指令:指挥处理器从新的内存地址开始执行。过程使用RET指令将处理器转回到该过程被调用的程序点上。

    (注:在使用call时,指令将返回地址压入堆栈中,返回地址也就是call后面的那条指令地址,把被调用的过程地址复制到指令寄存器中,当过程返回时,将返回地址弹回到指令寄存器中)

     文件句柄:是32位整数,Windows操作系统用它来标识当前打开的文件。当用户程序调用一个Windows服务来打开或创建文件时,操作系统就创建一个新的文件句柄,并使其对用户程序可用。每当程序调用OS服务方法来读写该文件时,就必须将这个文件句柄作为参数传递给服务方法

    label指令:插入一个标号,并定义大小属性,但不占用内存空间

    valname label type

    enter指令:两个操作数,第一个是常数,定义为局部变量保存的堆栈空间字节数并且总是向上舍入为4的倍数,第二个定义了过程的词法嵌套

    enter numbytes,nestinglevel

    等价于

    push ebp
    
    mov ebp,esp
    
    sub esp-numbytes

    leave指令:结束一个过程的堆栈帧,反转了enter的指令,恢复了过程被调用时ESP和EBP的值。

    leave

    等价于

    mov esp,ebp
    pop ebp

    local:声明一个或多个变量名,并定义其大小,必须跟在PROC伪指令后面

    local varlist;varlist是变量定义列表,用逗号分隔表项,可选为跨越多行。每个变量采用label:type形式。(标号可以为任意有效标识符,类型可以使标准类型,也可以使用户定义类型)

     macro指令:宏定义,可以定义数据、代码等,并且当遇到调用两次宏定义来定义数据时,可能会出现变量被定义两次的错误,这时可以使用local添加到定义变量的那,就会产生不同的标号名。

    struct指令:结构,跟C语言的结构体一样,用来定义数据结构,很多系统函数都是用了结构体

    int 21h指令:https://www.cnblogs.com/ynwlgh/archive/2011/12/12/2285017.html 超详细

    exitm指令:终止了后续的宏的展开(类似返回值)

    lea与offset指令区别:https://blog.csdn.net/qq_38216239/article/details/78601433

    lea与OFFSET个人理解:offset需要确定的地址(已经指定了的),不像lea可以确定寄存器加一个常量类的地址

     jcc指令(条件跳转指令):https://blog.csdn.net/fengshh2301/article/details/53327195

    cld:方向标志位清零(正向)

    std:方向标志位置1(反向)

    rep:ecx>0时,重复执行指令

  • 相关阅读:
    node.js 与java 的主要的区别是什么
    基于Node.js+MySQL开发的开源微信小程序B2C商城(页面高仿网易严选)
    Linux下SVN安装配置
    Linux查看CPU和内存使用情况
    Linux添加/删除用户和用户组
    java远程调试
    springboot和mybatis集成,自动生成model、mapper,增加mybatis分页功能
    客户端、服务端,跨域访问设置
    HTTP和HTTPS协议
    KMP算法代码
  • 原文地址:https://www.cnblogs.com/pppyyyzzz/p/11979881.html
Copyright © 2020-2023  润新知