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位模式。或者您也可以与我们联系。)egcc-m16
生成与-m32
类似的代码,但将其汇编为16位模式,因此大多数指令都有操作数大小和地址大小前缀(因此只能在386或更高版本上运行)