2017-10-06 4 views
2

J'essaie d'écrire un chargeur de démarrage pour un système d'exploitation que je développe.erreur A2008: erreur de syntaxe:

Je reçois une erreur de syntaxe sur la première ligne.

Voici mon code assembleur:

.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 

Voilà ma ligne de compilation:

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

L'erreur que je reçois:

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

Pour autant que je sache, ce ligne ne devrait pas être un problème.

Merci pour l'aide :)

+3

'.286' n'est pas une directive valide selon [msdn] (https://msdn.microsoft.com/en-us/library/8t163bt0.aspx). Il suffit de le supprimer. – Jester

+1

Vous pouvez envisager une ancienne version de MASM ou TASM assemble le code 16 bits et l'éditeur de liens 16 bits. J'espère aussi que vous n'essayez pas d'appeler du code 32 bits. –

+0

Ou utilisez NASM, il assemble encore bien le code 16 bits, AFAIK. (Mais utilise une variante différente de la syntaxe intel, voir https://stackoverflow.com/tags/intel-syntax/info.) –

Répondre

3

Comme suggéré dans Petch @ Michael les commentaires, en utilisant une ancienne version de MASM (6,15 dans mon cas), et cela a fonctionné. Notez que si vous utilisez du code C/CPP dans votre projet et avez l'intention de les lier avec les fichiers d'assemblage (comme je le faisais), vous devrez également rétrograder votre compilateur C. Dans mon cas, je l'ai changé de CL (Microsoft C/C++ Optimisation Compiler Version 19.10.25017) à dmc.

+0

Ou vous avez besoin de votre OS pour passer en mode 32 ou 64 bits. pourrait utiliser 'gcc -m16' pour faire un code similaire à' -m32' mais l'assembler pour le mode 16 bits, donc la plupart des instructions ont des préfixes de taille d'opérande et de taille d'adresse (et ne fonctionneront donc que sur un 386 ou plus tard.) –