-3

これは、このアセンブリクラスの概要の最初のラボです。cに埋め込まれたアセンブリを記述しなければならない割り当てがあります。教授がCコードを提供しましたが、独自のアセンブリを作成する必要があります。タスクは、3つの値(eax、ebx、およびecxに配置されている)を比較し、最大値と最小値を加算して2を掛けることです。

私はシナリオの1つを書き、自分が正しい方向に進んでいるかどうかを知りたいと思いました。

私は4つのシナリオがあることを知っています:

  • a> b> c
  • a <b> c
  • a> b <c
  • a <b <c

私はa>b>cを書きました。

これは正しいです ?教授が提供したテストをコンパイルすると、奇妙な答えが返ってきます。たとえば、eax = 3、ebx = 2、ecx = 1は8の答えを与えるはずですが、それは奇妙な何かを与えます。助けてください、ありがとう。

cmp eax, ebx
jge agreatb

agreatb:
cmp ebx, ecx
jge bgreatc

bgreatc:
add eax, ecx
mov eax, edx
4

1 に答える 1

2

課題のことは今は忘れてください。

12345 個の値があり、最高値と最低値を見つけるように求められたら、どうしますか? 明らかな方法は、「現在の最高値」と「現在の最低値」を追跡することです。リスト内の各値について、それが新しい最高値または新しい最低値になるかどうかを確認します。

この場合、「current_highest = value1; current_lowest = value1」で開始し、value2 が現在の最高値よりも高いか現在の最低値よりも低いかを確認し、次に value3、次に value4 などを確認します (最後の値に到達するまでループします)。価値)。

同じアルゴリズムを、任意の数のエントリを持つ配列で最高値と最低値を見つけるコードとして実装できます (値の数が >= 1 である限り)。

値の順序 (たとえば、a < b < c、a < c < b など) は無関係であることに注意してください。値の数に関係なく、知る必要はありません。

次に、このアプローチを割り当てに適用します。ここでは、3 つの値のリストで最高値と最低値のみを検索します。

current_highest = a;
current_lowest = a;

if(b < current_lowest) current_lowest = b;
else(b > current_highest) current_highest = b;

if(c < current_lowest) current_lowest = c;
else(c > current_highest) current_highest = c;
于 2012-10-04T05:16:57.140 に答える