Re: [問題] 請問malloc, calloc這類c語言在assembl …

看板ASM作者 (五代裕作)時間16年前 (2008/07/16 18:53), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/2 (看更多)
※ 引述《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
文章代碼(AID): #18VTCYJA (ASM)
文章代碼(AID): #18VTCYJA (ASM)