NASM - 错误:行

时间:2016-04-10 01:27:13

标签: assembly visual-studio-2015 nasm bootloader x86-16

我没有编写汇编代码,因为在MS-DOS 3.31中调试所以 NASM 以及在机器代码中使用标签作为变量的概念对我来说是全新的。我使用Visual Studio 2015和Asmdude语法高亮显示器。我使用 NASM 版本2.12.01 compiled on Mar 17 2016

我目前正在阅读有关名为Writing a Simple Operating System from Scratch的操作系统开发的PDF文件。我跟随其中一个例子,我无法得到组装的例子。

请原谅过时的代码结构,我觉得这种方式更容易阅读。

                    [BITS 16]
                    [ORG 0x7C00]
                    MOV BP, 0x8000 ; Set the base of the stack a little above where BIOS
                    MOV SP, BP ; loads our boot sector - so it won 't overwrite us.
ProgramOrigin:      MOV BX, StartText ; Put startup text into BX
                    CALL PrintString ;Call PrintString Function
                    JMP EndProgram ;Continue to end of program
PrintString:        PUSHA ; Push all registers onto stack 
                    MOV AH, 0x0E ; BIOS Teletype
NextChar:           MOV AL, [BX] ; Move the contents of memory segment at address in BX into AL
                    CMP AL, 0x00 ; if (AL == 00) it is the end of the string
                    JE EndPrint ; End function
                    INT 0x10 ;Interrupt to print character to screen
                    ADD BX, 1 ;ELSE increment address in BX
                    JMP nextChar ;Repeat
EndPrint:           POPA ;Return original Register values 
                    RET ;Return from function
StartText:          DB 'Kernel v0.01', 0x00
errText:            DB 'Error', 0x00
notFoundText:       DB 'Not Found', 0x00
EndProgram:         times 510 -($-$$) DB 0
                    DW 0xAA55

我确实为PrintString函数添加了一些自己的代码,但我认为我之所以这样做是正确的,因为它在我的DOS VM上进行了调试

1 个答案:

答案 0 :(得分:2)

使用iuppiter后,确定Visual Studio正在使用错误的文件编码编写汇编程序文件。副作用是 NASM 无法解析文件并退出:

boot.asm:1: error: label or instruction expected at start of line

要在Visual Studio 2015中解决此问题,可以使用此过程使用不同的编码保存文件:

  1. 打开汇编程序文件
  2. 在菜单
  3. 上选择File/Save as...
  4. 在文件选择器窗口的底部,点击底部Save按钮旁边的向下箭头
  5. 点击Save with encoding...
  6. 选择Western European (Windows) Codepage 1252(这应该是纯文本)
  7. 点击OK