2010-03-02 18 views
8

Tôi có đoạn mã sau:Làm cách nào để lưu trữ giá trị của sổ đăng ký vào vị trí bộ nhớ được trỏ tới bởi một con trỏ?

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

Tuy nhiên, trong các mã, khi tôi dereference con trỏ lưu trữ (như trong *(int *)storage), tôi không nhận được 1. Vì vậy, cách thích hợp lưu trữ giá trị là gì của một thanh ghi vào bộ nhớ được trỏ tới bởi một con trỏ C++?

Trả lời

5

Bạn có chắc chắn mình biết những gì bạn thực sự cần không? Bạn đã yêu cầu mã lưu trữ giá trị đăng ký vào bộ nhớ được phân bổ bởi malloc ("được trỏ bởi con trỏ"), tức là *(int*) storage vị trí, nhưng bạn đã chấp nhận câu trả lời lưu trữ (hoặc ít nhất là cố gắng lưu trữ) giá trị vào con trỏ chính nó, đó là một điều hoàn toàn khác.

Để lưu eax vào bộ nhớ "được trỏ đến bởi một con trỏ", tức là vào *(int*) storage như bạn yêu cầu, bạn sẽ phải làm một cái gì đó như thế

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

(tôi sử dụng "Intel" right cú pháp từ trái sang hướng dẫn lắp ráp, tức là mov bản sao từ toán hạng bên phải sang toán hạng bên trái. Tôi không biết cú pháp nào - phải sang trái hoặc trái sang phải - trình biên dịch của bạn đang sử dụng.)

Ghi chú cũng rằng trong mov edi, dword ptr storage, phần dword ptr hoàn toàn là tùy chọn và không gây ra sự khác biệt nào ference gì.

+0

xấu, tôi nghĩ bạn nói đúng. Tôi không có thời gian để kiểm tra xem câu trả lời đầu tiên có hiệu quả hay không. Nó nhắc tôi rằng những thứ như "dword" đã tồn tại, vì vậy tôi cho rằng nó sẽ giải quyết được vấn đề. –

Các vấn đề liên quan