;------------------------------------------------------------
.286 ; CPU type
;------------------------------------------------------------
.model TINY ; memory of model
;---------------------- EXTERNS -----------------------------
extrn _BootMain:near ; prototype of C
func
;------------------------------------------------------------
;------------------------------------------------------------
.code
org 07x00h ; 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 main ; End of program
粗暴地说,我复制了这段代码from here。
我自己尝试过,但MASM不同意。我得到的唯一错误是:
StartPoint.asm(10) : error A2206: missing operator in expression
或者:
LINK : warning L4055: start address not equal to 0x100 for /TINY
很抱歉,如果我在提出这个问题时犯了任何错误,我就是新人。
编辑:MASM版本是6.15,我在cmd中使用ml StartBoot.asm。语法为ml [filename.asm]。
编辑:我打算将其编译成.exe文件。
答案 0 :(得分:2)
编辑:我打算将其编译成.exe文件。
EXE文件甚至COM文件必然意味着存在执行程序的操作系统。由于您正在编写引导加载程序,因此无法依赖操作系统!引导程序只是一个软件,不需要特别注意运行。
org 07x00h
这显然是MASM不会挖掘的线。将其更改为org 7C00h
答案 1 :(得分:-1)
我不会评论您的代码,而只是评论您引用的错误消息。汇编程序错误是由“org”指令中的拼写错误引起的(IIRC应该读取7c00h,而不是7x00h),并且可以安全地忽略链接器警告:它指出如果调用“.com”,生成的文件将不起作用。 “DOS程序。这没关系,因为你不打算这样做。 您可能会遇到与使BootMain遵守正确约定相关的问题,并且您很可能首先需要至少链接StartPoint.obj,但这超出了当前问题的范围。