Assembly 错误A2008:语法错误:

Assembly 错误A2008:语法错误:,assembly,masm,Assembly,Masm,我正在尝试为我正在开发的操作系统编写一个引导加载程序 第一行出现语法错误 这是我的汇编代码: .286 ; CPU Type .model TINY ; memory of model ;---------------------- EXTERNS ----------------------------- extrn _BootMain:near ; prototype of C func ;--------------------------------

我正在尝试为我正在开发的操作系统编写一个引导加载程序

第一行出现语法错误

这是我的汇编代码:

.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
以下是我的编译行:

"*location*\14.10.25017\bin\HostX86\x86\ML.EXE"  /c StartPoint.asm
我得到的错误是:

asm(1):错误A2008:语法错误:

据我所知,这条线路应该没问题


感谢您的帮助:)

正如@Michael Petch在评论中所建议的那样,使用了旧版本的MASM(在我的例子中是6.15),它成功了


请注意,如果您在项目中使用C/CPP代码,并且打算将它们与程序集文件链接(正如我所做的),那么您也需要降级您的C编译器。在我的例子中,我将其从CL(Microsoft C/C++优化编译器版本19.10.25017)更改为。

.286
不是有效的指令。只需删除它。您可能希望考虑一个旧版本的MASM或TASM汇编16位代码和16位链接器。我还希望您不要试图调用32位代码,或者使用NASM,它仍然可以很好地组装16位代码。(但使用了不同的intel语法变体,请参阅。删除该行会导致另一个错误:/assembly-fatal-error-lnk1190-invalid-fixup-found-type-0x0001。我最终使用了@Michael Petch solution,下载了旧版本的MASM,它成功了。感谢您的快速响应。或者您需要您的操作系统切换到32位或64位模式。或者您也可以与我们联系。)e
gcc-m16
生成与
-m32
类似的代码,但将其汇编为16位模式,因此大多数指令都有操作数大小和地址大小前缀(因此只能在386或更高版本上运行)