-2

请注意,有人告诉我这不是发布此类问题的正确位置,因此请不要浪费您的时间继续阅读它。另外,我不得不说,当时我并不完全了解 stackoverflow.com 的用途,而且我不知道存在其他 stackexchange.com 网站。

关于这一点,请重新考虑您对这个问题的投票(我会删除它,但我不能)。谢谢你。

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

所以,这是我的第一个汇编代码,你怎么看?

具体来说

1 有没有更好的方法可以通过阵列?

2 我使用 SI 来存储数组地址,因为我已经看到这是一种常见的范例。但是为什么要打扰呢?我不能只使用“矢量”吗?

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

谢谢你们 :)

4

1 回答 1

0

1 有没有更好的方法可以通过阵列?

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

  • 融合MOV BX,[SI]ADD SI,2进入LODSW(请注意,这将为您提供加载的单词AX而不是BX)。
  • 从 8 开始循环计数器并向下计数。这使您可以摆脱CMP最后的 并简单地使用DEC/ JNZ。或者更好CX的是,用作循环计数器并使用LOOP指令(CX为您递减)。

我使用 SI 来存储数组地址,因为我已经看到这是一种常见的范例。但是为什么要打扰呢?我不能只使用“矢量”吗?

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

于 2013-05-11T18:15:10.120 回答