-2

この種の質問を投稿するのに適切な場所ではないと言われたことに注意してください。そのため、時間を無駄にしないでください。また、私は当時、stackoverflow.com が何のためにあるのかを正確に知りませんでした。さらに、他の stackexchange.com Web サイトが存在することも知りませんでした。

それに関して、あなたがこの質問に与えた投票を再考してください (私はそれを削除しますが、私にはできません)。ありがとうございました。

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

これは私の最初のアセンブリ コードの 1 つですが、どう思いますか?

具体的には

1 配列を使用するより良い方法はありますか?

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

君たちありがとう :)

4

1 に答える 1

0

1 配列を使用するより良い方法はありますか?

「より良い」は、あなたの目標が何であるかによって異なります。たとえば、コードサイズを最小限に抑えたい場合は..

  • MOV BX,[SI]とLODSWADD SI,2を結合しますAX(これにより、の代わりにロードされた単語が得られることに注意してくださいBX)。
  • ループ カウンターを 8 から開始し、下方向にカウントします。これにより、最後に を取り除き、CMP単純にDEC/を使用できますJNZ。またはさらに良いことCXに、ループカウンターとして使用し、LOOP命令を使用します(これはあなたのために減分CXします)。

配列アドレスを格納するために SI を使用しているのは、これが一般的なパラダイムであることがわかったからです。しかし、なぜわざわざ?代わりに「VECTOR」を使用することはできませんか?

プログラム内の複数の場所で配列を参照する必要がある場合、配列を参照するすべての命令で変位として配置するよりも、レジスタ内に配列のアドレスを保持する方が、よりコンパクトなコードになります。

于 2013-05-11T18:15:10.120 に答える