1

アセンブリ言語でいくつかの演習を行っていますが、最適化について理解できない質問を見つけました。誰でも私を助けてくれますか

問題は、次のアセンブリ コードを最適化することです。

------------------例1--------------------- ----

mov dx, 0 ---> this one I know-> xor dx,dx

------------------例2--------------------- ---

cmp ax, 0
je label

-----------------例3--------------------- ----

mov ax, x
cwd
mov si, 16  
idiv si     

----> この例で考えられるのは、最後の 2 行を idiv 16 までにサブスクライブすることですが、よくわかりません。

------------------例4--------------------- ----

mov ax, x
mov bx, 7
mul bx
mov t, ax

-----------------例5--------------------- ------

mov si, offset array1
mov di, offset array2
; for i = 0; i < n; ++i
do:
   mov bx, [si]
   mov [di], bx
   add si, 2
   add di, 2
loop do
endforloop
4

2 に答える 2

5

例 2 では、andまたはtestオペコードを確認する必要があります。例 1 と同様に、定数の必要性を取り除くことができます。

例 4 は、 orx * 7と同じであることを思い出してください。8 の乗算はシフト命令で実行できます。x * (8 - 1)x * 8 - x

例 5 については、Intel が SI から DI に移行するためのはるかに簡単な方法を提供していたと思われるでしょう。たぶん、REPetitive MOVe String Word のようなもの :-)

于 2012-04-06T03:41:19.997 に答える
0

たとえば、2 の累乗による 3 の除算は、右シフトとして実装できます。

例 5 では、現在のコードが必要に応じて CX の初期化に失敗していることに注意してください (最適化されたバージョンでは、間違いなくそれも行う必要があります)。

于 2012-04-06T04:37:33.277 に答える