0

次のアセンブリコードがあります。で 2 つの配列を宣言しましたDS。コードの後半で、BXアクセスする配列要素のインデックス番号に移動します。このPRINT_CHARプロセスでは、シリアル ポート経由でデータを送信ALして画面に表示するだけです。しかし、何らかの理由で、配列要素にアクセスできないようです。それは私に偽の価値を与えるだけです。print_charプロセスは間違いなく問題ありません。配列にアクセスするために知っている両方の方法を試しました。どんな助けでも大歓迎です。ありがとう!

    DATA_SEG    SEGMENT
ARRAY       DB  '1','2','3','1','2','3','4','5','6','4','5','6'
bottom2     DB  '7','8','9','7','8','9','*','0','#','*','0','#'
    DATA_SEG    ENDS



    topnumbers:
    cmp BX, 12
    jge bottom_numbers
    MOV AL,DS:ARRAY[BX] ; Stores character in AL (?)
    jmp NUMBERS

    bottom_numbers:
    sub BL, 12d
            LEA SI, bottom2
            ADD SI, BX
            MOV AL, [SI]

    NUMBERS:
    XOR AH, AH
    CALL FAR PTR PRINT_CHAR
4

1 に答える 1

1

.exe ファイルを作成する場合は、セグメント レジスタを対応する値に設定する必要があります。次のようなものです(ただし、秘密のアセンブラ構文も確認してください):

    mov  ax, DATA_SEG
    mov  ds, ax

さらに、上記のような小さなプログラムでは、DOS がすべてのセグメント レジスタを設定し、far ポインタを使用する必要がないため、.COM 実行可能形式のほうが扱いがはるかに簡単です。

于 2013-10-21T07:50:59.763 に答える