2012-10-04 73 views
-2

這是我們在這個彙編類介紹中的第一個實驗。我有一個任務,我必須編寫嵌入在c中的程序集。教授提供了C代碼,但我們必須編寫自己的程序集。任務是比較3個值(已放入eax,ebx和ecx)並添加最大值和最小值並將其乘以2.彙編比較指令

我寫了一個場景,我想知道如果我我在正確的軌道上。

我知道,會有4種方案:

  • 一> B> C
  • 一個< B> C
  • A> B <Ç
  • 一個< b <Ç

我寫了一個> 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 
+1

通過行代碼行步驟。怎麼了? –

+0

實際上有6個場景(忽略相等),對於'a','b'和'c'的每個置換都有一個場景。 – nneonneo

+0

我想通了,mov eax,edx實際上應該是移動edx,eax。 謝謝。 我應該一步一步地在發佈前進行調試。 – TitaniuM

回答

2

忘掉現在的分配。

如果有12345個值,並且您被要求查找最高值和最低值,那麼您會怎麼做?明顯的方法是跟蹤「當前最高價值」和「當前最低價值」;對於列表中的每個值,您都要檢查它是否應成爲新的最高值或新的最低值。

對於這種情況,您可以從「current_highest = value1; current_lowest = value1」開始,然後檢查value2是否高於當前最高或低於當前最低值,然後檢查value3,然後是value4等(循環直到你達到最後一個值)。

相同的算法可以被實現爲與條目的任意數量的陣列查找最高值和最低值的代碼(只要值的數目是> = 1)

注意的順序值(例如,如果一個< b,一個< 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;