• 汇编中的proc指令


    proc是子程序定义伪指令, far是该子程序的属性,决定调用程序和子程序是否在同一代码段
    如下:为子程序定义及说明,

    子程序名 PROC NEAR ( 或 FAR )
    xxxxxx具体代码
    ret
    子程序名 ENDP
    

    子程序名为符合语法的标识符
    NEAR属性(段内近调用): 调用程序和子程序在同一代码段中,只能被相同代码段的其他程序调用;
    FAR属性(段间远调用): 调用程序和子程序不在同一代码段中,可以被相同或不同代码段的程序调用.

    使用proc传递参数

    proc完整格式:

    label PROC [attributes] [USES reglist], parameter_list
    

    传递参数举例:

    _ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam
    
    AlignSize proc uses ecx edx nSize:UINT,nAlign:UINT
    

    其中use的功能就相当于

    push ecx
    push edx
    

    如果你学习过DOS汇编就应该知道了,在子程序中一般会把一些寄存器入栈,然后子程序运行完后再把这些寄存器的值pop出来,相当暂时把寄存器中值保存在栈中,uses就是一条伪操作而已,如果你不嫌麻烦,也可以直接自己push入栈也可以的,win32好多这样的伪操作和伪指令,其实就是真正指令的一种封装,本来真正的指令是push ecx 和push edx的,win32把它封装成一个uses就可以完成了,但是在编译的时候,编译器还是会编译成push ecx push edx的,当然加上uses后,子程序运行前会自动把要保护的寄存器入栈,子程序结束后会自动把自动把寄存器中的值还原,所以可以节省程序员写代码的时间

  • 相关阅读:
    .net core3.1 使用log4日志
    windows 使用IIS 部署 .net core3.1
    EntityFramework 延时加载、事务、导航属性
    EntityFramework EF状态跟踪和各种查询
    EF查看SQL2种方式 和 映射
    Sql Server 逻辑文件 '' 不是数据库 '' 的一部分。请使用 RESTORE FILELISTONLY 来列出逻辑文件名。
    async和await
    线程异常处理和取消和线程锁
    Task和TaskFactory
    thread:线程等待,回调
  • 原文地址:https://www.cnblogs.com/laohaozi/p/12537603.html
Copyright © 2020-2023  润新知