zoukankan      html  css  js  c++  java
  • 汇编中的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后,子程序运行前会自动把要保护的寄存器入栈,子程序结束后会自动把自动把寄存器中的值还原,所以可以节省程序员写代码的时间

  • 相关阅读:
    Ansible
    Ansible
    MySQL
    JS计算时间差(天,时,分钟,秒)
    cookie,localStorage,sessionStorage的区别
    css布局 -双飞翼布局&圣杯布局
    Python批量爬取网站图片
    vue-cli3中引入图片的几种方式和注意事项
    git常用命令
    vue-cli3的打包并在本地查看
  • 原文地址:https://www.cnblogs.com/laohaozi/p/12537603.html
Copyright © 2011-2022 走看看