Re: [問題] 請問malloc, calloc這類c語言在assembl …
※ 引述《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
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):
ASM 近期熱門文章
PTT數位生活區 即時熱門文章