1

私は組み立てが初めてです。私はフォームを学んでいる本の次のコードを持っています。MASM32をダウンロードしました。私のパソコンは Win7 64bit です。次のコードを作成しようとしました。

.model small
.stack 100h

.data
a dw 2
b dw 5
sum dw ?

.code
main proc
mov ax, @data
mov ds, ax

mov ax, a
add ax, b
mov sum, ax

mov ax, 4c00h
int 21h

main endp
 end main

残念ながら、次のエラーが表示されます。

Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997.  All rights reserved.

 Assembling: C:\masm32\test.asm
C:\masm32\test.asm(11) : error A2006: undefined symbol : DGROUP
C:\masm32\test.asm(14) : error A2074: cannot access label through segment registers
C:\masm32\test.asm(15) : error A2074: cannot access label through segment registers
C:\masm32\test.asm(16) : error A2074: cannot access label through segment registers
C:\masm32\test.asm(22) : warning A4023: with /coff switch, leading underscore required for start address : main
_
Assembly Error
Press any key to continue . . .

解決策について検索しました。行の前にerror A2074:追加することで解決できました。私はこの投稿からそれを取りました:セグメントレジスタを介してラベルにアクセスできません, アセンブリのエラーです が、残念ながら、解決策は理由とこれは何ですか?ASSUME DS:_DATA.data

これらのエラーが表示される理由と解決方法を教えてください。私は初心者で、最初にいくつかの詳細とステップバイステップが必要です。

4

1 に答える 1

3

MASM32 に付属のインクリメンタル リンカーではなく、16 ビット DOS コードをリンクするには、16 ビット Microsoft セグメント リンカーを使用する必要があります。MS からダウンロードしてください: 16 ビット Microsoft セグメント リンカー 5.60

ディレクトリに解凍し、link.exe の名前を link16.exe などに変更して、/masm32/bin ディレクトリに配置します。16 ビット DOS アプリには link16 を、32 ビット アプリには link を使用できるようになりました。

また、正しいコマンド ライン パラメーターを使用して 16 ビット コードをアセンブルする必要があります。例を次に示します: assembly fatal error LNK1190: invalid fixup found, type 0x0001 64 ビット OS を使用しているため、16 ビット DOS アプリをネイティブに実行できなくなりました。エミュレータを使用する必要があります。Dフェンドリローデッドを使っています。

于 2013-06-15T19:50:55.240 に答える