我没有编写汇编代码,因为在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上进行了调试
答案 0 :(得分:2)
使用iuppiter后,确定Visual Studio正在使用错误的文件编码编写汇编程序文件。副作用是 NASM 无法解析文件并退出:
boot.asm:1: error: label or instruction expected at start of line
要在Visual Studio 2015中解决此问题,可以使用此过程使用不同的编码保存文件:
File/Save as...
Save
按钮旁边的向下箭头Save with encoding...
Western European (Windows) Codepage 1252
(这应该是纯文本)OK