セグメントレジスタ、アセンブリ内のエラーによってラベルにアクセスすることはできません

StackOverflow https://stackoverflow.com/questions/1512734

  •  19-09-2019
  •  | 
  •  

質問

INCLUDE Irvine16.inc

.data
    byteArray   BYTE 6 DUP(?)
    listSize = ($ - byteArray)
    aSum        WORD 0
    soffset = 0
.code
main PROC
    mov     ax, @data
    mov     ds, ax
    mov     cx, listSize
Loop1:
    mov     ax, 0
    movzx   ax, [byteArray + soffset]
    add     aSum, ax
    soffset = soffset + 1
    loop Loop1
    exit
main ENDP
END main

私は取得していますエラーはエラー「A2074:セグメントレジスタを介してラベルにアクセスすることはできません」です。

私は、ByteArrayのをループしsoffsetを使用しようとしています。

役に立ちましたか?

解決

私はIrvine16.incに何か分からないが、私はそれはいくつかの点で.model small,...を言って賭けます。

あなたが追加した場合、

ASSUME DS:_DATA

そして、あなたのエラーメッセージは、それがプログラムの実行を作るのに十分だ場合、私は疑問だが、離れて行くでしょう。

<時間>

[OK]を、私はアイデアを持っています。私はあなたが32ビットの例に切り替えるべきだと思います。すなわち、セグメント・レジスタがOSによって設定やプログラムによって使用されていない平坦なモデルです。私はちょうどアーバイン例と32ビットの組み立てと実行なかったことを起こるサンプルプロジェクトを、ダウンロードします。

のx86マシンコードで奇妙そしてツイスト世界では、16ビット・モデルは、少なくともユーザプログラムの観点から、かなりより複雑な32ビットモデルを超えています。

他のヒント

このエラーは.modelの.objファイルにDOSプログラム(COFF!=フラット)を構築しようとしていることが原因です。さらにML.EXEはerror A2006:undefined symbol : DGROUPをスローします。ソースは、古いファッションOMFファイルにアセンブルする必要があります。コマンドラインを次のようにファイルをビルドします:

ml.exe /omf hello.asm
link16.exe hello.obj, hello.exe;

ml.exeは、Visual Studioのインストールの一部です。 link16.exeアーバインのライブラリスイートで(」例のプログラムとリンクライブラリのソースコードの一部です。 .. ")。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top