1

私はこれらのleal指示を与えられ、その意味を記入しなければなりません。命令がどのように機能するかを研究しようとしてきlealましたが、ウェブ上で関連する資料を見つけるのに苦労しています。私が見つけたのは

leal (src1, src2), dst  //dst = src2 + src1

leal命令はそれよりもはるかに複雑であるため、この情報では十分な情報が得られません。

これはどのように見えますか?

%eaxが値 x を保持%ecxし、値 y を保持しているとします。表に記入してください。

%edx =  x + 6___________leal 6(%eax),%edx
%edx =  x + y___________leal (%eax,%ecx),%edx
%edx =  x * 5y___________leal (%eax,%ecx,4),%edx
%edx =  9x + 7___________leal 7(%eax,%eax,8),%edx
%edx =  4y + 10___________leal 0xA(,%ecx,4),%edx
%edx =  x + 3y + 9___________leal 9(%eax,%ecx,2),%edx
4

1 に答える 1

4

私がすることは、最初のステップとして上記の att 構文を intel 構文に変換することです。これは、分析がはるかに直感的であるためです。

lea edx, [eax + 6]            
lea edx, [eax + ecx]          
lea edx, [eax + ecx * 4]      
lea edx, [eax + eax * 8 + 7]  
lea edx, [ecx * 4 + 10]       
lea edx, [eax + ecx * 2 + 9]  

アセンブリ構文について何も知らなくても、上記を見れば、それらが何を意味するかを理解できます。これを好みのプログラミング言語の割り当てステートメントとして頭の中でマッピングできます。割り当て先は左側にあり、割り当てられる値は右側にあります。これで、レジスターを自分の値xy値に置き換えるだけです。

edx = x + 6
edx = x + y
edx = x + y*4
edx = x + x*8 + 7 => x*9 + 7
edx = y*4 + 10
edx = x + y*2 + 9
于 2013-11-04T01:50:43.913 に答える