2010-03-02 58 views
8

我有以下代碼:如何將寄存器的值存儲到由指針指向的內存位置?

void * storage = malloc(4); 

__asm 
{ 
    //assume the integer 1 is stored in eax 
    mov eax, storage //I've tried *storage as well but apparently it's illegal syntax 
} 
/* other code here */ 
free(storage); 

然而,在代碼中,當我取消引用存儲指針(如*(int *)storage),我沒有得到1。那麼,什麼是存儲價值的正確方法一個寄存器到C++指針指向的內存中?

回答

5

你確定你知道你真正需要什麼嗎?您請求將存儲寄存器值的代碼存儲到由malloc(「由指針指向」)分配的內存中,即*(int*) storage位置,但您已接受將該值存儲(或至少嘗試存儲)到該指針的答案本身,這是完全不同的事情。

要存儲eax到內存「指向指針」,即進入*(int*) storage作爲你的要求,你必須做這樣的事情

mov edi, dword ptr storage 
mov dword ptr [edi], eax 

(我用的是「英特爾」右我不知道你的編譯器正在使用哪種語法 - 從右到左或從左到右 - )

也請注意在mov edi, dword ptr storagedword ptr部分是完全可選的,並沒有任何不同無論如何。

+0

我的不好,我認爲你是對的。我沒有時間檢查第一個答案是否奏效。它讓我想起「dword」這樣的東西存在,所以我認爲它會解決問題。 – 2010-03-02 20:01:14

相關問題