作者Golven (五代裕作)
看板ASM
标题Re: [问题] 请问malloc, calloc这类c语言在assembl …
时间Wed Jul 16 18:53:21 2008
※ 引述《king19880326 (OK的啦~我都可以接受)》之铭言:
: 标题: [问题] 请问malloc, calloc这类c语言在assembly的对应指令
: 时间: Mon Jul 14 02:27:06 2008
:
恕删
节录自早期DOS系统函数呼叫手册
DOS呼叫 (int 21h)
函数 48H (AH = 48H) : 配置记忆体区块 (相当於C的malloc())
功能:
记忆体配置
输入参数:
AH = 48H
BX = 所需的记忆体区块长度
传回值:
如果配置成功, 则:
进位旗标被清除
AX = 分配到的记忆体段落位址 (从AX:0000开始)
如果配置失败, 则:
进位旗标被设定
AX = 错误代码
7 : 记忆体控制区块被损坏
8 : 记忆体空间不足
BX = 可用的记忆体大小
函数 49H (AH = 49H) : 归还记忆体区块 (相当於C的free())
功能:
释放已分配到的记忆体位置
输入参数:
AH = 49H
ES = 欲释放的记忆体区块的段落位址 (由函数48H所配置而来)
传回值:
如果释放成功, 则:
进位旗标被清除
如果释放失败, 则:
进位旗标被设定
AX = 错误代码
7 : 记忆体控制区块被损坏
9 : 错误的段落位址
函数 4AH (AH = 4AH) : 修正记忆体区块 (相当於C的realloc())
功能:
修正记忆体配置
输入参数:
AH = 4AH
BX = 新要求区块之大小
CX = 要被修正的区块的区段位址 (由函数48H所配置而来)
传回值:
如果配置成功, 则:
进位旗标被清除
如果配置失败, 则:
进位旗标被设定
AX = 错误代码
7 : 记忆体控制区块被破坏
8 : 记忆体空间不足
9 : 错误的段落位址
BX = 最大可用的记忆体区块大小
: 那动态的呢(ex. malloc, calloc)??
:
: 翻了整本教科书, 实在想不到什麽组语的指令可以做到这件事 OTZ
:
: --
:
※ 发信站: 批踢踢实业坊(ptt.cc)
: ◆ From: 140.112.243.43
: 推 sunneo:静态的通常是sub esp, N吧? 07/14 02:46
: → sunneo:动态的是透过Heap,你只能说他是 call _malloc 07/14 02:46
: → sunneo:因为malloc是一__cdecl calling convention的global func 07/14 02:47
: → sunneo:由作业系统进行底层呼叫以及记忆体管理. 07/14 02:48
: 推 ccu5566:由底层控制, x86有 int 可以做这些事 07/14 09:32
: 推 Golven:若是在DOS下, 则是DOS呼叫... mov ah,XX int 21h 07/14 09:34
: → Golven:XX=48h 相当於 malloc, 49h 则是 free, 4ah 则是 realloc 07/14 09:35
: 推 loveflames:楼上以回文的方式详细说明的话可收至 07/14 19:49
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.204.4.93