2017-10-06 28 views
2

開発中のOS用のブートローダを作成しようとしています。エラーA2008:構文エラー:

最初の行に構文エラーが表示されます。ここで

は私のアセンブリコードです:

"*location*\14.10.25017\bin\HostX86\x86\ML.EXE" /c StartPoint.asm 

私は取得していますエラー:

StartPoint.asm(1): error A2008: syntax error : .

を私の知る限りでは、この

.286 ; CPU Type 
.model TINY ; memory of model 
;---------------------- EXTERNS ----------------------------- 
extrn    _BootMain:near  ; prototype of C func 
;------------------------------------------------------------ 
;------------------------------------------------------------ 
.code 
org    07c00h   ; for BootSector 
_main: 
       jmp short _start  ; go to main 
       nop 

;----------------------- CODE SEGMENT ----------------------- 
_start: 
     cli 
     mov ax,cs    ; Setup segment registers 
     mov ds,ax    ; Make DS correct 
     mov es,ax    ; Make ES correct 
     mov ss,ax    ; Make SS correct   
     mov bp,7c00h 
     mov sp,7c00h   ; Setup a stack 
     sti 
           ; start the program 
     call   _BootMain 
     ret 
     END _start 
     END _main ; End of program 

ここに私のコンパイル行です問題はないはずです。助けのための

感謝:)

+3

'.286'は[msdn](https://msdn.microsoft.com/en-us/library/8t163bt0.aspx)による有効な指令ではありません。ただそれを削除します。 – Jester

+1

古いバージョンのMASMまたはTASMでは、16ビットコードと16ビットリンカーをアセンブルすることができます。また、32ビットコードを呼び出そうとしていないことを願っています。 –

+0

また、NASMを使用しても、AFAIKという16ビットコードを組み立てても問題ありません。 (ただし、intel-syntaxの別の変形を使用しています。https://stackoverflow.com/tags/intel-syntax/infoを参照してください。 –

答えて

3

@Michaelペッチは、MASM(私の場合は6.15)の古いバージョンを使用して、コメントで提案し、それが働いたよう。あなたは(私がやったように)、プロジェクトにC/CPPコードを使用してアセンブリファイルでそれらをリンクする予定がある場合は、同様にあなたのCコンパイラをダウングレードする必要があること

は注意してください。私の場合は、CL(Microsoft C/C++最適化コンパイラバージョン19.10.25017)からdmcに変更しました。

+0

それとも、32または64ビットモードに切り替えるには、あなたのOSを必要としています。それとも、 。ほとんどの命令は、オペランドサイズおよびアドレスサイズプレフィックスを持っているので、-m32' 'のようなコードを作るが、16ビットモードのためにそれを組み立てるために、' gccの-m16'を使用することができます(そしてこうしてのみ386以降で実行されます。 ) –