`
com1com4
  • 浏览: 161657 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Delphi笔记(整理)-堆和栈

阅读更多
在Windows 下,一个程序的堆栈由两个值定义:堆栈的最小值和最大值。这两个值受编译器指示字
$MINSTACKSIZE 和 $MAXSTACKSIZE 所控制,它们的缺省值分别是16,384(16K)和1,048,576
(1M)。在Linux 下,堆栈大小只能由环境设置。

在register 约定下,最多有3 个参数可通过CPU 寄存器传递,其余(若有的话)参数被传递到栈。此时,
参数以声明的顺序(和pascal 相同)被传递,前3 个有资格的参数分别使用EAX、EDX 和ECX 寄存器。

过程和函数必须保留EBX、ESI、EDI 和EBP 寄存器,但可以修改EAX、EDX 和ECX。当在汇编语言
中实现构造和销毁时,保证预留DL 寄存器。过程和函数被调用时,是假定CPU 的direction 标志是清除
的(对应于CLD 指令),并且返回时,direction 标志也必须是清除的。

以下约定适用于函数的返回值:
􀁺 可能的话,有序类型通过寄存器返回值:字节通过AL 返回,字通过AX 返回,双字通过EAX 返
回。
􀁺 实数类型的返回值在浮点协处理器的栈顶寄存器(top-of-stack register,ST(0))。对于Currency 类
型的返回值,ST(0)中的值被乘以10000。比如,Currency 值1.234 在ST(0)中的值为12340。
􀁺 对字符串、动态数组、方法指针、Variant、或Int64 类型的返回值,就像函数在其它参数的后面额
外声明了一个var 参数。换句话说,是函数调用者传递一个额外的32 位指针,它指向的变量用来
返回结果。
􀁺 指针、类、类引用和过程指针类型,结果通过EAX 返回。
􀁺 对静态数组、记录和集合类型,若结果占用1 个字节,它通过AL 返回;若结果占用2 个字节,
它通过AX 返回;若结果占用4 个字节,它通过EAX 返回。否则(结果超过4 个字节),结果通
过一个额外的var 参数返回,它在所有声明的参数的后边。

在register 调用约定下,Self 就像在所有其它参数的前面声明,所以,它总是通过EAX 寄存器传递。
在pascal 调用约定下,Self 就像在所有其它参数的后面声明(有时还要包括返回函数值的额外的var 参
数),所以,它最后被压入栈,所在的地址比其它参数要低。
分享到:
评论

相关推荐

    delphi-modbus-develop.zip_delphi_delphi-modbus-1.6.7_modbus_modb

    最新版 delphi-modbus-develop 1.6.7

    Delphi-OpenCV-master delphi2010-XE8可用的OpenCV组件

    首先,"Delphi-OpenCV-master"是专为Delphi 2010至XE8版本设计的OpenCV组件集,经过作者的精心整合和修正,解决了原本可能出现的路径错误问题,确保了在这些特定版本的Delphi中能够顺利安装并使用OpenCV库。...

    Delphi-OpenCV-Class-main

    Delphi binding for OpenCV Experimental Delphi binding for OpenCV 4.7.0 Development environment - Delphi 10.4, 11 x64 platform only

    ffmpeg-delphi-pascal-headers-3.0.2.zip_FFVCL_delphi vlc_ffmpeg_f

    FFmpeg 是一个强大的开源多媒体处理框架,广泛应用于...总之,"ffmpeg-delphi-pascal-headers-3.0.2.zip" 提供了 Delphi 开发者使用 FFmpeg 的关键资源,通过深入学习和实践,开发者可以创建功能丰富的多媒体应用程序。

    delphi-modbus-tcp-indy.7z

    这个"delphi-modbus-tcp-indy.7z"压缩包包含的是用Delphi编写的Modbus TCP组件,它基于两个不同的Indy版本——Indy 9和Indy 10。 Indy(Internet Direct)是Delphi和C++Builder中的一套网络库,提供了一组跨平台的...

    delphi-modbus-tcp三方控件,支持Delphi11

    标题中的"delphi-modbus-tcp三方控件,支持Delphi11"表明这是一个专为Delphi编程环境设计的第三方Modbus TCP库,用于在Delphi 11应用程序中实现Modbus通信。Modbus是一种广泛使用的工业通信协议,主要用于设备间的...

    Delphi26Binaries-2019.27-windows.pak

    Delphi26Binaries-2019.27-.pak

    Delphi-OpenCV-master

    Delphi-OpenCV (master) OpenCV version - 2.4.6 Development environment - Delphi XE2-XE4 Contributors: Laentir Valetov email:laex@bk.ru Mikhail Grigorev email: sleuthhound@gmail.com How to install: ...

    DELPHI学习笔记----获取WINDOWS进程信息.pdf

    在本学习笔记中,我们将详细探讨如何在使用DELPHI语言进行Windows开发时获取和管理Windows进程信息。这包括对相关Windows API函数的深入了解,特别是那些与进程列表和模块列表相关的函数。此外,我们还将分析如何...

    Delphi-OpenCV-master 2.4.13

    本项目“Delphi-OpenCV-master 2.4.13”是将OpenCV库与Delphi集成的实践案例,适用于Delphi 2010到10.3的开发环境。Delphi是一款强大的面向对象的 Pascal 编程工具,常用于桌面应用开发,与OpenCV的结合使得开发者...

    Kassl-dOPC4Delphi-Trial-Setup.exe

    Kassl-dOPC4Delphi-Trial-Setup.exe

    Delphi-OpenCV-master.zip_Delphi OpenCV_delphi open cv_open_openc

    OPEN CV LIBRARY for DELPHI

    Delphi【HMC-SHA签名、SHA加密、MD5加密、URL编码与解码、Base64编码与解码】

    通过上述工具和算法,开发者可以在Delphi应用程序中实现数据的安全传输、存储和验证,确保应用的安全性和用户数据的隐私。SHA.exe、HMAC.exe、BASE64.exe、URL.exe、MD5.exe这些文件可能是使用Delphi编写的独立可...

    TMQTTClient-delphi.rar_MQTT delphi_TMQTTClient-delphi_delphi ssl

    标题中的"TMQTTClient-delphi.rar_MQTT delphi_TMQTTClient-delphi_delphi ssl"揭示了这个压缩包包含的是一个适用于Delphi开发环境的MQTT客户端库,名为TMQTTClient-delphi,特别强调了它支持SSL/TLS加密连接。...

    Delphi源码实例演示堆分配与栈分配的不同..rar

    首先,让我们来了解什么是栈(Stack)和堆(Heap)。栈是计算机内存中一个特殊区域,它按照后进先出(LIFO)的原则工作,主要用于存储程序运行时的临时变量。例如,函数调用时,函数参数、局部变量等都会被存储在栈...

    Delphi7版本 - X-Superobject

    总的来说,X-SuperObject 是 Delphi 7 开发者处理 JSON 的理想选择,它以其易用性和强大功能,极大地提升了 Delphi 7 应用程序在数据交换方面的灵活性和效率。无论是在桌面应用还是服务器端开发中,它都能为 Delphi ...

    Delphi源码大全-应有尽有

    Delphi源码大全-应有尽有 Delphi源码大全-应有尽有 Delphi源码大全-应有尽有 Delphi源码大全-应有尽有 Delphi源码大全-应有尽有 Delphi源码大全-应有尽有 Delphi源码大全-应有尽有 Delphi源码大全-应有尽有 Delphi...

    Delphi6/7 SIP-0.6协议栈

    在Delphi 6和7这两个版本的集成开发环境中,开发者可以利用SIP协议栈来构建支持VoIP(Voice over Internet Protocol)功能的应用程序。本篇文章将深入探讨Delphi 6/7中的SIP-0.6协议栈,以及如何利用其源代码进行...

    Delphi手册----全面地介绍delphi的各项功能!.doc

    Delphi手册----全面地介绍delphi的各项功能!.doc

    delphi-rest-client-api-master

    在Delphi项目中,首先需要将"delphi-rest-client-api-master"导入,然后按照组件提供的API进行配置和调用。例如: ```delphi uses RESTClient, RESTRequest, RESTResponse, JSON; var RESTClient1: TRESTClient;...

Global site tag (gtag.js) - Google Analytics