2010-03-02 5 views
8

Aşağıdaki kod var:Kayıt defterinin değerini işaretçi tarafından gösterilen bir bellek konumuna nasıl kaydederim?

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); 

Ancak kodunda, ne zaman (*(int *)storage olduğu gibi) depolama pointer, ben değerini depolamak doğru yolu nedir, 1. Yani alamadım KQUEUE Bir C++ işaretçisinin işaret ettiği belleğe bir kayıt?

cevap

5

Gerçekten neye ihtiyacınız olduğunu biliyor musunuz? Kayıt değerini malloc ("bir işaretçi ile işaretlenmiş"), yani *(int*) storage konumu tarafından ayrılan belleğe depolayan kodu talep ettiniz, ancak değeri işaretçiye depolayan (veya en azından saklamaya çalışan) yanıtı kabul ettiniz kendisi, tamamen farklı bir şey. belleğe eax saklamak için

istediğiniz gibi, bunu

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

(I "Intel" kullanın sağ Böyle bir şey yapmak zorundayız *(int*) storage içine yani "bir gösterici ile gösterilen" -sağa-sola veya soldan sağa - -. Ayrıca derleyici kullanıyor)

not. sola montaj talimatları sözdizimi, yani sağ İşlenenden mov kopya hangi sözdizimi bilmiyorum işlenen sola mov edi, dword ptr storage'un dword ptr parçasında tamamen isteğe bağlı ve hiçbir fark yaratmıyor ne olursa olsun.

+0

Benim kötü, sanırım haklısın. İlk cevabın işe yarayıp yaramadığını kontrol etmek için zamanım yoktu. Bana "dword" gibi şeyler geldiğini hatırlattı, bu yüzden sorunun çözüleceğini düşündüm. –

İlgili konular