2016-11-24 43 views
0

我有一個包含一個int像下面這樣的結構從結構指針來:保存int類型的函數變量使用內聯彙編

typedef struct arch 
{ 
    int size; 
    unsigned char *info 
} SARCH; 

,我有一個需要執行以下功能:

void change(SARCH *arch) { 
    int n; 
    n = arch-> size; 
    // Do something with n 
} 

我只需要將分配部分轉換爲程序集。問題是我試圖與此代碼並不起作用:

ATTEMPT 1

void change(SARCH *arch) { 
int n; 

_asm { 
mov [n], arch.size // THIS LINE 
} 

} 

ATTEMPT 2

void change(SARCH *arch) { 
int n; 

_asm { 
mov eax, arch.size 
mov [n], eax // THIS LINE 
} 

} 

ATTEMPT 3

void change(SARCH *arch) { 
int n; 

_asm { 
movsx eax, arch.size 
mov [n], eax 
} 

} 

ATTEMPT 4

void change(SARCH *arch) { 
int n; 

_asm { 
mov eax, arch 
mov eax, [eax] arch.size 
mov [n], eax // THIS LINE 
} 

}

嘗試1,2和4由於我評論過的行不能編譯。嘗試3編譯並運行,但不會在n中正確保存該值。相反,它保存了另一個數字,例如104而不是7.我如何實現int賦值?

+0

你爲什麼要做這個問題? –

+0

C不支持_methods_。你有一個_function_。 – Olaf

+2

嘗試4編譯並在這裏工作(Visual Studio 2015),一旦我從'move'中刪除了多餘的'e'。 –

回答

0

我決心通過只是在做以下

_asm { 
    mov eax, dword ptr [data] 
    mov ecx, dword ptr [eax] 
    mov dword ptr [n],ecx 
}