问题标签 [bochs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
350 浏览

assembly - Bochs:汇编远跳转在伪造的内存区域中丢失(无效的操作码错误)

我开始在(NASM)汇编中开发一个小玩具操作系统,只是为了我的娱乐。我编写了一个引导加载程序,它将第一个(也是唯一一个)文件从名为“kernel.sys”的 FAT12 文件系统加载到内存的 offset0x7E00中。在实模式下,内核只通过 BIOS 设置合适的视频模式,进入 32 位(受保护)模式。这就是我的问题所在。

首先,我设置了一个带有 3 个描述符(null、ring 0 代码、ring 0 数据)的 GDT,并将其直接加载到内存区域0x0500。然后我用LGDT指令告诉处理器,然后我设置寄存器PE中的位CR0,我想通过远跳转进入保护模式以设置适当的段(0x08 - GDT中的代码段)和指令指针。

第一个版本在 QEMU 中工作,但在 Bochs 中没有。Bochs 需要在远跳之前设置段,所以我在我的代码中修改了这个:直接在远跳之前,我从我的 GDT 中加载带有数据段的选择器。但是,由于“操作码无效”错误,Bochs 仍然无法进入保护模式。

请帮我解决这个错误!

这是我的内核代码:(请注意,标签b32从未达到!)

这是博克斯日志:

这是我的引导程序:

0 投票
0 回答
274 浏览

assembly - 为什么在循环调用过程时这段代码会崩溃?

我尝试编写自己的简单引导加载程序,我有以下代码:

在保护模式下一段时间后它会崩溃。

我正在使用 GNU Assembler v2.24、Ubuntu 14.04 并在 bochs 中进行测试。

来自bochs的日志:

谁能解释为什么它崩溃了?

有什么办法可以解决吗?

0 投票
1 回答
265 浏览

assembly - 如何从我的引导加载程序将 545 字节(或更多)的文件加载到内存中?

我正在编写引导加载程序并坚持使用一个 545 字节的文件,我不知道如何加载。如果它是一个 512 字节的文件存储在第 2 扇区,它可以很容易地加载到内存中。但这对我来说似乎有点奇怪。

我该怎么做呢?

0 投票
2 回答
1678 浏览

assembly - 从引导扇区打印字符串仅显示第一个字符

作为学习操作系统开发的一部分,我正在 x86 引导扇区中开发代码。我希望我的代码将其打印到控制台:

你好

我得到了这个:

H

为什么它只打印一个字符而不是整个字符串?我怎样才能解决这个问题?

这是我的代码片段:

0 投票
1 回答
1771 浏览

nasm - 将 ASCII 字符转换为 HEX 值的程序集

我正在修改假设将 ASCII 字符转换为十六进制值的代码。我的第一个版本运行良好,没有任何问题,但是我的新功能有一些问题。

这是我将 ASCII 值转换为十六进制值的新函数:

但是这个函数似乎不能正常工作 - 当从这个函数发送输出时int 13,bochs 正在返回错误 - read/write/verify parameter out of range。我使用的数字是 00 Head, 00cylinder和 01 sector,所以我想这不是我写的论点的实际问题。

我还使用了我以前的函数和相同的参数,它正确加载了我想要的扇区。

我之前尝试使用 Bochs 调试器来跟踪内存中int 0x13的寄存器,但是看起来寄存器具有我输入的相同值。

我以前的功能是:

我不希望代码的任何其他部分被损坏,因为我没有修改它。如果需要,我将包含完整的代码,但是它很长。

新功能有什么遗漏或错误吗?

编辑:忘了提到代码正在运行16 bit real mode

0 投票
1 回答
1192 浏览

gcc - Gcc inline assembly: what's wrong with the dynamic allocated register `r` in input operand?

When I test the GCC inline-assembly, I use the test function to display a character on the screen with the BOCHS emulator. This code is running in 32-bit protected mode. The code is as follows:

The result I'm getting is:enter image description here

The red character on the screen isn't displaying B correctly. However, when I changed the input register r to c like this: ::"c"(ch):);, which is the last line of the above code, the character 'B' displays normally:

enter image description here What's the difference? I accessed the video memory through the data segment directly after the computer entered into protected mode.

I have trace the assembly code, I have found that the code has been assembled to mov al, al when the r register is chosen and the value of ax is 0x0010, so al is 0x10. The result should be like this, but why did it choose the al register. Isn't it supposed to choose the register which hasn't been used before? When I add the clobbers list, I have solved the problem.

0 投票
2 回答
2434 浏览

assembly - 装配 - 在图形模式下打印字符

我试图在图形模式下打印一个字符。通常当我打印一个我正在做的角色时:


这次不行了。我想问题是我切换到图形模式:


那么我怎样才能仍然使用图形模式(我需要它)并打印一个字符?我正在使用 nasm 编译器、bochs 调试器和 8086 平台。

非常感谢!

0 投票
0 回答
47 浏览

assembly - Bochs 仿真中不存在的段访问

我正在编写一个引导加载程序,当我使用 Bochs 运行它时,我收到错误“不存在的段访问”。我找不到问题。我的代码如下:

请帮我解决这个问题。

0 投票
1 回答
1773 浏览

operating-system - Pintos 安装 SIGVTALRM() 重新定义错误

我在安装过程中没有出错,所有的 make 命令都运行良好,但最后当我运行“pintos run alarm-multiple”时,我收到以下错误

任何帮助将不胜感激。谢谢。

0 投票
1 回答
1514 浏览

assembly - 切换到保护模式并进行远跳后出错

我正在使用FASM(平面汇编程序)编写引导加载程序。我在 16 位模式下成功,但在切换到 32 位模式时遇到错误。我查看了一个类似的答案(实际上在跳到保护模式后在 GPF 出现了同样的问题),但该解决方案并没有解决我的问题。

这是我的引导加载程序 -

这是 GDT -

她是 Bochs 控制台输出 -

谁能帮我解决这个问题?这个问题困扰我很久了。。

编辑-

这是 print32 代码-

以及引导加载程序的更改代码 -