【问题标题】:assembly using nasm "label or instruction expected at start of file"使用 nasm“文件开头的标签或指令”的汇编
【发布时间】:2014-03-17 15:40:45
【问题描述】:

我正在学习如何制作引导扇区,并且我正在遵循 notepad++ 中的所有代码(使用葡萄酒),我尝试组装代码:

{BITS 16}
{ORG 0x7C00}

jmp 0x0:Start

Start:
cli
mov AX,0x9000
mov SS,AX
mov SP,0xFB00
sti

mov AH,0Eh
mov AL,'E'
int 10h

cli
hlt

times 510 - ($ - $$) db 0
dw 0xAA55

我不断收到上面描述的错误,我不知道如何解决这个问题......

(代码间隔正确我不知道为什么这个网站把它们放在同一行)

【问题讨论】:

  • 我在发布后大约 2 秒发现我使用 {} 而不是 [] 但问题仍然存在
  • 什么行号?除了大括号(嬉皮括号 - 使用共和党括号或什么都不用),我没有看到任何问题。你是在“-f bin”输出模式下组装它吗? (它是唯一知道“org”的)
  • 我用的是精灵,我试试看
  • 同样的事情......还有其他想法吗?
  • "notepad++" 给你unicode而不是ascii?什么行号? (Brendan 关于首选“用户表单”的说法是正确的,但在这里应该没有任何区别)

标签: assembly


【解决方案1】:

NASM 中的指令有一个用户表单(例如bits 16)和一个较低级别的表单(例如[bits 16])。在很多情况下,它们是相同的(用户表单只是在内部转换为较低级别的表单)。在某些情况下,它们并不相同,用户表单会做一些额外的簿记工作,而较低级别的表单不会做(例如section vs [section])。在任何情况下,这些都不涉及花括号,您应该使用用户表单(不带方括号)而不是较低级别的表单(带方括号)。

我没有看到任何其他会导致错误的问题。

我确实看到了一些不相关的问题(例如,假设 EBDA 是特定大小,而 hlt 之前的 cli 会阻止“control+alt+delete”)。

【讨论】:

  • 这只是一个关于制作引导扇区的教程,而不是实际工作的教程
  • 我实际上应该澄清一下,代码确实有效,它应该。它只是不是为了真正制作一个系统。
  • 嗯...... Nasm (AFAIK) 中没有这样的错误消息。消息是“...在行首”。它应附有文件名和发生错误的行号。它说什么?我试过了,我可以确认布伦丹所说的话。大括号消失后,您的代码中没有错误。我最好的猜测是你的编辑器给你 Unicode 或一些专有的“doc”格式而不是 ascii。看看你能不能把它打败提交,或者如果一切都失败了,换个编辑器试试。
  • 好吧,我尝试了 ascii,收到一条新消息“nasm:致命:无法打开输入文件 `boot3.asm'”
  • 我知道了,原来“boot3.asm”文件不存在,我去检查了因为有人说他们有相同的并检查出来,所以我去打开另一个一个“boot.asm”将“{}”更改为“[]”并将其保存为 ASCII 编码,并且它可以工作,所以感谢大家帮助解决编码问题
猜你喜欢
  • 1970-01-01
  • 2016-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多