问题标签 [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.
video - 是否有适用于 43 行或更多行的标准 BIOS Int 10h 视频模式?
我正在编写在加载任何操作系统之前以实模式运行的代码。我的程序的一部分涉及将信息转储到视频显示器,而标准的 80x25 文本模式并没有削减它。
许多版本的 Windows 和其他操作系统似乎可以毫无问题地切换到更大的文本模式,我认为是 43 行,当它们显示内核恐慌时。我知道更大的文本模式已经存在了很长时间,所以我希望至少有一种标准模式。
这里有一个相当大的 BIOS 视频模式列表:
http://www.columbia.edu/~em36/wpdos/videomodes.txt
不幸的是,相同的模式编号似乎在芯片组之间的含义差异很大。
曾几何时,我似乎记得曾经使用一种名为 VESA BIOS 的东西以独立于设备的方式访问 Super VGA 图形模式,但我似乎还记得涉及必须加载的 DOS TSR。这不是一个选项在这里,因为 DOS 没有运行。
我正在寻找一种可以在最广泛的硬件上运行的模式,包括 VMware ESXi 中的虚拟视频适配器。更改模式的代码也需要紧凑,所以我希望一个简单的 Int 10h 可以做到。
有任何想法吗?Windows 和 VMware 内核恐慌是如何做到的?
assembly - 在 fasm (MS-DOS) 中访问 0xF000FFFE(计算机类型)的内存
问题是:我需要从 BIOS 内存中获取“计算机”类型。我知道,我可以在 fasm 中这样做(我的程序和所有段都是 16 位):
但这会返回零,这是不对的,因为 turbo c++ 3.1 中的等效代码
使用 LARGE 模型(在代码生成设置中)时,返回我计算机的正确“类型” 。那么如何在 fasm 中修复它?(例如我知道,masm 有 .model 指令,但 fasm 中没有这样的东西)。请帮忙...
assembly - 如何知道当前模式是实模式还是大实模式?
假设我的 API 是从一个只能在实模式或大实模式下工作的系统调用的。我的 API 应该显示当前的系统模式。那么它怎么知道当前模式是实模式还是大实模式呢?
笔记:
- 在大实模式下,保护模式启用位
CR0
被禁用,因此检查它没有任何区别。 - 即使启用了 A20 地址线,也并不意味着它处于大实模式。
assembly - i386 实模式 - 从软盘加载
我正在接近 x86 实模式编码,我在这里找到了一些示例代码:http ://www.nondot.org/sabre/os/files/Booting/nasmBoot.txt
该文章中的第三个示例使用实模式下的 BIOS 调用将软盘的几个扇区加载到内存中,然后跳转到它们。它是一个简单的引导加载程序。它从第 2 个扇区加载 5 个扇区。在第二个扇区(第一个扇区的 512 字节之后),有一些用于打印一些文本的指令。
好吧,我编译了它并尝试了二进制文件,但文本没有打印出来。你能重现这个功能障碍并告诉我如何解决它吗?
我感谢您的帮助,并为我的问题平庸表示歉意。(但我不知道哪里出了问题)。
assembly - i386 实模式。关于从内存加载数据的一些问题
我只是接近机器级 x86 编码,所以请原谅我的问题的琐碎性。以下代码旨在成为一个简单的引导加载程序。它将软盘的某些扇区转储到内存中,然后跳转到加载的代码。在加载的代码中,我试图从内存变量中读取,但没有成功,如评论中所述。
我不明白为什么它不起作用。我非常感谢任何帮助。
assembly - 我可以运行在 dosbox 中切换到保护模式的汇编程序吗?
我们正在研究一个汇编程序,它将 386 处理器从实模式切换到保护模式,然后再切换回实模式。该程序是使用 TASM 编译的。
因为这个程序需要做一些特权操作,而且需要实模式启动,所以我们需要从DOS下运行。为此,我们被告知带上软盘,这样我们就可以在大学的计算机上启动 DOS。
我想知道是否可以使用 Dosbox。但它需要在保护模式和实模式下忠实地模拟 I386,我不确定它是否这样做。
assembly - TASM 中的 div 问题
我的 div 有点问题,我需要一些帮助来解决这个问题,我在 TASM 中有一个应用程序,我必须在一系列数字中找到 3 的倍数,问题是当我做一个 div 时程序冻结并且我不知道为什么。
我的代码是:
x86 - 从物理地址计算逻辑地址(x86)
据我所知,物理地址是通过将段地址(16位)左移4次并将其与16位偏移地址相加来计算的。我的问题是,如果两组不同的段:偏移地址值给出相同的结果,例如。对于 200A:B608 和 2138:A328
200A0
+B608
2B6A8
和
21380
+A328
2B6A8
两者都给出相同的结果!
现在,这是否意味着它们指向相同的物理地址(如果是,如何?),
或者物理地址是否不应该以上述方式计算?
或者,如果它有效,那么我怎样才能从物理地址中获取段:偏移地址(这可能吗?)
operating-system - 为什么在从实模式切换到保护模式之前需要禁用中断?
我在许多 ose(和一些引导加载程序)中看到,它们都cli
在从实模式切换到保护模式之前禁用中断()。为什么我们需要这样做?
assembly - 这个实模式代码有什么问题
我有一段代码在实模式下运行并在屏幕上打印一条消息,我使用 Dosbox 0.7 作为我的执行环境。下面是代码
我能够很好地组装这段代码,但是当我运行它时,它只是挂在那里并且我可以在 linux 终端中看到一条消息
这就是我组装它的方式
我曾尝试在 google 中搜索此消息,发现这可能是 DOSBox 版本的问题。
谁能让我知道这里可能是什么问题?