2013-05-11 56 views
-2

請注意,我被告知這不是發佈此類問題的正確位置,所以請不要浪費時間繼續閱讀它。另外,當時我不得不說,我不知道什麼是stackoverflow.com,並且我不知道其他人的stackexchange.com網站是否存在。查找數組中的極小值

對此,請重新考慮您對這個問題的投票(我會刪除它,但我不能)。謝謝。

====================

所以,這是我第一次彙編代碼之一,你覺得呢?

具體

1是否有更好的方法可以讓我去thourgh陣列?

2我使用SI來存儲陣列地址,因爲我已經看到這是一個常見的範例。但爲什麼要打擾呢?我不能只用'VECTOR'嗎?

3其他一般建議? (這是我第一次真正的代碼...)

.org  100h 

.MODEL  SMALL 
.DATA 
    VECTOR  DW 3,4,2,0,54,-2,3,4 
    MIN   DW ? 

.CODE 
.STARTUP 
    XOR   AX,AX   ;counter 
    LEA   SI,VECTOR  ;store vector address in SI 
    MOV   BX,[SI]   ;BX is the minium, let's suppose it's the first element here 
    ADD   SI,2   ;I want to go through the array 2byte at once 
    INC   AX    ;scanned elements in AX 

TESTMIN: 
    CMP   BX,[SI] 
    JL   GOAHEAD 
    MOV   BX,[SI] 

GOAHEAD:  
    ADD   SI,2 
    INC   AX 
    CMP   AX,8 
    JL   TESTMIN    

ret 

謝謝你們:)

+1

http://codereview.stackexchange.com/是工作代碼反饋的地方。 – 2013-05-11 17:20:08

+0

@RaymondChen謝謝你,對不起傢伙,我不會重複錯誤! – doplumi 2013-07-01 11:15:43

回答

0

1是否有更好的方法可以讓我去thourgh陣列?

「更好」取決於你的目標是什麼。如果你想盡量減少代碼大小例如,您可以..

  • 保險絲MOV BX,[SI]ADD SI,2LODSW(注意,這會給你AX而不是BX加載的話)。
  • 在8處啓動循環計數器並向下計數。這可以讓你在最後擺脫CMP,並簡單地使用DEC/JNZ。或者更好的做法是,使用CX作爲循環計數器並使用LOOP指令(它將遞減CX)。

我使用SI存儲陣列的地址,因爲我已經看到這是一個共同的模式來做到這一點。但爲什麼要打擾呢?我不能只用'VECTOR'嗎?

有在寄存器陣列的地址會導致更緊湊的代碼不是把它作爲一個位移要引用數組的每一條指令,因爲你想在你的程序在多個地方引用它。