2015-12-09 104 views
1

我意識到,這是禁止從內存複製到記憶中的場景是這樣的:裝配移動指令有異常嗎?

section .data 
var1 db 23 
var2 db 9 

section .text 
global _start 
_start: 
mov [var1],[var2] 
mov eax,1 
mov ebx,0 
int 80h 

但是,最近我發現,沒有嚴格遵守了規則的代碼示例。 這裏的理念是:

section .data 
var1 dd 23 
var2 dd 9 

section .text 
global _start 
_start: 
mov dword [var1],var2 
mov eax,1 
mov ebx,0 
int 80h 

我知道我們不能存儲位置之間傳輸數據,但我不知道是否有可能通過一個變量的存儲位置,另一個變量。它實際上編譯,並完成這項工作。
我的問題是:這是否真的假設工作?
預先感謝您,任何幫助,將不勝感激。

+1

當然,你可以在'var1'中存儲'var2'的地址,就像你在這裏做的那樣,但這與你的第一個例子是不同的操作結果。 –

+0

好的,謝謝;) – misty

+2

'mov [var1],[var2]'試圖將_var1_的值複製到_var2_中。兩個操作數都是內存操作數,所以你不能這樣做。 'mov dword [var1],var2'將_var2_的指針移動到_var1_。指針只是一個立即值(像一個常量),所以這個操作是允許的_MOV_ –

回答

3

在這種情況下,var2被用作實際的內存地址文字。換句話說,它不是試圖將某個地址移動到該地址或從該地址移開,而是將該地址的值移入[var1]位置。

+0

我明白了,就像上面提到的那樣,它就像常量一樣。謝謝。 :) – misty