我正在尝试使用NASM进行一些底层编程。 我知道很多程序集,并且尝试编译我认为是完全正确的代码会导致: loader.s:8 : error: parser: instruction expected这里出了什么问题? 这是我的代码:

global loader                    ; the entry symbol of the program

MAGIC_NUMBER equ 0x1BADB002      ; define the magic number constant
FLAGS        equ 0x0             ; multiboot flags
CHECKSUM     equ -MAGIC_NUMBER   ; calculate the checksum
                                 ; (magic number + checksum + flags should equal 0)

KERNEL_STACK SIZE equ 4096       ; size of stack (4096 bytes or four kilobytes)

section .bss                     ; bss section for uninitialized values
align 4                          ; the code must be aligned by 4 bytes
kernel_stack:                    ; label points to the beginnning of memory
    resb KERNEL_STACK_SIZE       ; reserve stack for the kernel

section .text                    ; the text section is where code is run
align 4                          ; the code must be aligned by 4 bytes
    dd MAGIC_NUMBER              ; write the magic number to the machine code,
    dd FLAGS                     ; the flags number,
    dd CHECKSUM                  ; the checksum too

  loader:                        ; the loader label, where the programstarts executing
  mov eax, 0xCAFEBABE          ; move the value 0xCAFEBABE to EAX
  mov esp, kernel_stack + KERNEL_STACK_SIZE ;point kernel to top of stack
 .loop:
    jmp .loop ; loop forever (since this is a kernel, and it has to)

===============>>#1 票数:2 已采纳

错别字。 KERNEL_STACK SIZE不能有空格。

  ask by Safal Aryal translate from so

未解决问题?本站智能推荐:

2回复

操作系统的Boot-loader不起作用

我正在制作一个自定义操作系统。 我有两个nasm文件: boot.asm: start.asm: 我使用以下命令将它们编译成.bin文件: 然后使用以下命令将它们添加到软盘映像中: 当我从VirtualBox中的软盘映像启动时,它显示2个感叹号而不是一个,
1回复

x86 ASM:DD被用作“指令”吗?

在以下x86汇编代码中: 这些值似乎没有分配给任何变量。 那么这段代码是做什么的呢? 我听说过一些有关它存储在内存中的信息,但是究竟在哪里呢?
1回复

错误:操作码和操作数的无效组合-nasm

我创建了一个小程序来加载idtr与寄存器lidt指令。 我创建了此代码- 但是当我使用Nasm编译它时,出现错误- 我的编译命令是- 谁能指出该程序中的错误?
1回复

使用时间和对齐NASM指令将指令放置在复位向量指向的地址中

我考虑了一下以下汇编代码(NASM IA-32): 这只是一个例子。 想法是,我们有一个处于实模式的IA-32处理器。 在内存的顶部4 KB上,我们有一个NVRAM(非易失性RAM)。 复位向量指向0xFFF0,因此代码尝试将cli指令放置在0xFFFF0地址中,而与init16标签和align
1回复

在nasm组装中实施队列

如何在程序集(x86,32位保护模式)中实现队列结构? 像堆栈一样实现它很简单,但是当我从其中获取对象时,我必须将每个项目移动一个位置。 链表也是可能的,但是它的内存效率不是很高,也不是很快。 我正在以无格式汇编方式开发自己的操作系统,因此无法使用OS功能。
5回复

如何在NASM程序集中使用BIOS int 13h从磁盘加载内核?

我已经坚持了好几个星期了,并且不知道我哪里出错了,因为NASM没有给我任何错误。 由于评论,代码非常自我解释。 这是从BIOS加载的代码 这是应该(但未加载)的代码 任何帮助将不胜感激。 帕特里克
2回复

无法在保护模式下设置GS寄存器

我正在编写一个基于OSDev Wiki和一些相关书籍的信息的操作系统。 我发现在跳转到保护模式后,段初始化例程没有正确执行。 这是我的第二阶段加载器和内核代码: P没有打印在屏幕上,我发现GS=0而不是GS=0x18 。 P被写入线性地址0x0 。 奇怪的是, HLT循环正常工作
1回复

将16位实模式代码链接到符合Multiboot的ELF可执行文件时出现LD错误

我正在编写一个包含我的32位内核的Multiboot兼容的ELF可执行文件。 我的主要问题是我在生成可执行文件时收到一系列链接器错误: 重定位被截断以适合:R_386_16对``.text' 链接器脚本,代码和构建脚本如下 我决定尝试在我的操作系统中实现VESA VBE
1回复

进入保护模式并执行远距离jmp后出现三重错误[重复]

这个问题已经在这里有了答案: 建立全局描述符表之后维持恒定重启和保护模式 1回答 我正在编写一个业余OS内核。 每当内核进入保护模式并跳到其保护模式部分时,Bochs都会将故障加倍,并给出以下信息: 这是我的内核代码,应该从2000h:0000h加载并使用
1回复

我在NASM中收到宏错误:“错误:解析器:预期指令”

我不断收到相同的错误: error: parser: instruction expected 我在以下行中收到此错误: 我的代码是: 我已经尝试过了,但也不起作用: