查找数组中的最小值

时间:2013-05-11 16:18:59

标签: arrays assembly x86-16

请注意,我被告知这不是发布此类问题的正确位置,所以请不要浪费时间继续阅读。此外,我要说当时,我没有正确知道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 个答案:

答案 0 :(得分:0)

  

1有没有更好的方法可以去thourgh阵列?

“更好”取决于你的目标是什么。如果您想最小化代码大小,例如..

  • MOV BX,[SI]ADD SI,2融入LODSW(请注意,这会在AX而不是BX中为您提供加载的字词。
  • 在8处启动循环计数器并向下计数。这样您就可以在最后删除CMP,只需使用DEC / JNZ即可。或者更好的是,使用CX作为循环计数器并使用LOOP指令(对您递减CX)。

  

我正在使用SI来存储数组地址,因为我已经看到它是一种常见的范例。但为什么要打扰?我不能只使用'VECTOR'吗?

将数组的地址放在寄存器中会导致代码更紧凑,而不是在每个要引用数组的指令中将其作为位移,因为您希望在程序的多个位置引用它。