问题标签 [real-mode]

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 投票
3 回答
1180 浏览

c - 在哪里可以找到 c 编程语言的 dos.h 参考?

我正在寻找dos.hAPI 的参考/文档。(特别是对于 openwatcom 特定版本)。

从哪里获取文档?

0 投票
2 回答
360 浏览

memory - 关于实模式物理内存寻址

我和我的朋友正在集思广益,讨论一个关于实模式下物理内存寻址的问题,但我们无法解决这个问题。开始。

在实模式下,16 乘以段选择器寄存器并添加到偏移寄存器以获得 20 位物理地址。这因此导致重叠片段的可能性。

EG “段选择器 -> 0040 & 偏移量 -> 0010” = “段选择器 -> 0030 & 偏移量 -> 0110”

据我们了解,段选择器在添加到偏移量之前会移动 4 位。因此,为了避免这种分段,他们为什么不将分段选择器移动 6(将其乘以 64),然后再将其添加到偏移量。在我们看来,这将消除内存重叠的可能性。

这是否与他们在那段时间面临的任何硬件限制有关,或者仅仅是一个设计决定。

0 投票
2 回答
2409 浏览

x86 - cpu如何在实模式下计算20位地址

我知道它使用物理地址 = 段寄存器 << 4 + 偏移寄存器。虽然这两个寄存器都是 16 位的,但是 8086 怎么能处理一个 20 位的加运算呢?

0 投票
1 回答
3590 浏览

assembly - 什么是段落(当提到记忆时)

问一些看起来应该很容易查找的东西,我觉得很傻,但正如您可能猜到的那样,搜索段落会得到很多与我想知道的内容无关的结果。

过去几天我一直在学习汇编(编写一个小型引导加载程序,那种练习的东西),我看到了一些对称为段落的内存块的引用。我有一段遥远的记忆,一段是两个词,但我真的不确定。段落到底是什么,它的意义是什么?

0 投票
4 回答
10181 浏览

compiler-construction - 寻找 x86 的 16 位 c 编译器

我正在将 uc/OS-II 从 DOS 移植到 x86(实模式)。我需要:

  1. 生成实模式 16 位 x86 程序集的编译器

  2. 将生成的程序集组装成目标文件的汇编程序

  3. 将目标文件链接在一起并输出可执行文件的链接器(原始二进制文件、COFF、PE 或 ELF 格式都可以)

  4. 一个不调用任何 DOS 服务的标准库(int 21h),只依赖于 BIOS 服务。

我想知道是否有任何工具链可以做到这一点。

0 投票
1 回答
84 浏览

spacing - 我能得到一些关于实模式段的信息吗

我一直在尝试理解分段内存,我在这个网站上看到了这个声明:website。第一句话最让我困惑。。

“值得注意的是,尽管段的大小为 64KB,但它们在内存中的间隔为 16 个字节。如果您了解处理器在实模式下计算物理地址时所采取的过程,这对您来说应该是非常有意义的。由于段寄存器的内容构成了物理地址的高 16 位,因此它总是能被 16 整除,并且其最低四位设置为零。”

我不明白 64KB 段如何仅间隔 16 个字节......

0 投票
1 回答
1773 浏览

assembly - 我是否在实模式下正确设置了堆栈段?

我正在编写一个引导加载程序,并这样设置我的堆栈......

我这样做是否分配了 1024 字节的堆栈空间?是否适合在 0x00900 加载其他内容?0x00900 应该在我的堆栈数据之后...

0 投票
2 回答
285 浏览

variables - 从堆栈及其段更新位于数据段中的变量

我目前有三个内存段,我的主要数据段、堆栈段和我的 API 所在的段。以下指令从数据段执行,它们推送 cursorRow 和 welcomeMsg 的地址,然后对我的 API 段中的函数进行远调用。cursorRow 变量位于调用 API 函数的主数据段中。调用如下所示:

如何通过堆栈更改我的 API 所在段内的 cursorRow?cursorRow 需要从 API 更新。没有 API 函数改变数据段。我尝试过类似的东西:inc byte [ds:bp+8]add [ds:bp+8], 1。这是被调用的 API 过程:

它打印字符串,但 cursorRow 变量没有正确更新。我希望我对我的问题足够清楚。很难解释:D

0 投票
1 回答
3187 浏览

c - 实模式内核的 16 位 C 代码

我不知道如何为 16 位实模式编译我的 C 内核。我尝试了各种编译器,但都没有运气。我的引导加载程序只是将原始扇区从软盘(我的内核就在磁盘上的第一个扇区之后)加载到物理内存地址 1000h:0000h 然后跳转到它。如何编译我的 C 内核以在 16 位实模式下工作?

我的基本内核:

我尝试过的编译器是 GCC、tinyCC 和 DMC。我的目标是获得一个可以跳转以开始执行的平面二进制文件。

0 投票
5 回答
6409 浏览

assembly - 是否可以在实模式下使用 32 位寄存器/指令?

在研究一些简单的 os 源代码时,我对一个简单的汇编问题感到困惑。

在这个网站:http ://wiki.osdev.org/Babystep7下面的代码是从实模式切换到保护模式

我知道如何从实模式切换到保护模式。
但我的问题是,既然程序还处于实模式,它怎么能使用 32 位寄存器或指令呢?

是否可以在实模式下使用 32 位寄存器/指令?