セグメントレジスタ、アセンブリ内のエラーによってラベルにアクセスすることはできません
質問
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
はアーバインのライブラリスイートで(」例のプログラムとリンクライブラリのソースコードの一部です。 .. ")。