2012-12-28 53 views
-1

此命令在assambly中做了什麼?微程序彙編程序(jasmin)

mov ebx, [eax+ecx*4+12] 

它是否做以下的相同?

MOV EBX,ECX 
ADD EBX,EBX ; *2 
ADD EBX,EBX ; *4 
ADD EBX,EAX 
ADD EBX,12 
MOV EBX,[EBX] 

如果是,爲什麼他們不給同樣的結果在茉莉eax = 100hebx = 0ecx = 100h

結束。

+0

這似乎無關茉莉,JVM的彙編,因爲'mov'和'add'不爲任何JVM指令助記符正確。 – 2012-12-28 17:01:13

+1

@Tinctorius:我相信這個問題指的是[這個Jasmin](http://www.lrr.in.tum.de/~jasmin/),而不是[另一個](http://jasmin.sourceforge。淨/)。我想知道它是否應該有一個單獨的標籤。也許[標籤:jasmin-x86]? –

回答

0

可以說,我們對這些命令

mov eax, 0x1234 ; 1234h 
mov ebx, 0 
mov ecx, 0x1234 ; 1234h 
MOV EBX,ECX ; ebx = 0x1234 
ADD EBX,EBX ; *2 
ADD EBX,EBX ; *4 
ADD EBX,EAX ; ebx = 0x5B04 
ADD EBX,12 ; ebx = 0x5B10 
MOV EBX, [EBX] ; Error out of range 

; Or 
mov ebx, [eax+ecx*4+12] ; => mov ebx, [0x1234+0x1234*4+12] 

=>它實際上MOV EBX,[0x5B10]其中0x5B10是在內存中的地址數量,但在我的情況下,最大地址是0xFFC < 0x5B10,所以它的超出範圍,所以出現的結果是前一個命令的結果

所以通過使用像0x14的我們得到了相同的結果數值越小

mov eax, 0x14 ; eax = 0x14 
mov ebx, 0 ; ebx = 0 
mov ecx, 0x14 ; ecx = 0x14 
MOV EBX,ECX ; ebx = 0x14 
ADD EBX,EBX ; *2 
ADD EBX,EBX ; *4 
ADD EBX,EAX ; ebx = 0x64 
ADD EBX,12 ; ebx = 0x70 
MOV EBX, [EBX] ; => mov ebx, [0x70] 

; Or 
mov ebx, [eax+ecx*4+12] ; => mov ebx, [0x14+0x14*4+12] => mov ebx, [0x70] 

我們在這兩種情況下或梅索德得到:

eax = 0x14 
ebx = 0 => its 0 because the address 0x70 in the memory is empty = 0x0000 
ecx = 0x14 

如果我們在最後一行的東西前加像

mov [0x70], 0x111 

我們將得到EBX 0x111