このコマンドはassamblyで何をしますか?
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 = 100h
ebx = 0
ecx = 100h
終わり。
このコマンドはassamblyで何をしますか?
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 = 100h
ebx = 0
ecx = 100h
終わり。
これらのコマンドがあるとしましょう
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で取得します