下面按照我的理解說,在%rsi
指針存儲在%eax
如果那是正確的,那麼第二行說,在%eax
指針添加到指針%rdi
的代碼?指針在C轉化爲裝配
很混亂。我知道程序集沒有指針,我只是在將程序集翻譯成c語言。我必須將彙編代碼編寫成C代碼,而這兩行代碼正在殺死我。我能澄清一下嗎?
movl (%rsi), %eax
addl %eax, (%rdi)
下面按照我的理解說,在%rsi
指針存儲在%eax
如果那是正確的,那麼第二行說,在%eax
指針添加到指針%rdi
的代碼?指針在C轉化爲裝配
很混亂。我知道程序集沒有指針,我只是在將程序集翻譯成c語言。我必須將彙編代碼編寫成C代碼,而這兩行代碼正在殺死我。我能澄清一下嗎?
movl (%rsi), %eax
addl %eax, (%rdi)
因爲你似乎使用AT & T語法使用,括號取消引用%rsi
值。這些表達式的C等價物將是:
/* Expression 1 */
unsigned int* p = some_address;
unsigned int i = *p; /* *p dereferences the address in p */
/* Expression 2 */
unsigned int* p = some_address;
unsigned int i = 8;
i += *p /* Increase i by the value pointed to by p */
第一行不存*指針,它*提領*它。你也可以說它*從*地址*加載*。第二行是一個(非原子)*讀 - 修改 - 寫*,其中''eax'的值被添加到*由'rdi'指向的*對象。 – EOF
因此,不要將'%rsi'的內存空間複製到'%eax'中,將'%rsi'的內容移動到'%eax'中?我剛剛說過兩次同樣的事情,但我的意思是在指針 –
的環境中看到那些括號?這意味着'(%寄存器)'是內存中的*地址*。 'movl(%rsi),%eax' *與'將'%rsi'移動到'%eax'「非常不同,最接近與'movq%rsi,%rax'或'movl類似的設置%esi,%eax'。 – EOF