问题标签 [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 投票
2 回答
1777 浏览

assembly - Grub 并进入实模式(低级汇编语言编程)

我一直在开发一个玩具操作系统,并且一直在使用 grub 作为我的引导加载程序。最近在尝试使用 VGA 时,我发现我无法使用硬件中断。我发现这是因为我被 grub 置于保护模式。

有谁知道如何在不必摆脱 grub 的情况下回到实模式?

0 投票
3 回答
2415 浏览

linux - 是否可以关闭 linux 内核并在实模式下恢复?

假设我想在我的普通操作系统启动之前启动一个小型 linux 发行版。

  1. BIOS 加载 MBR 并执行 MBR。
  2. MBR 找到我的 linux 分区的活动分区。
  3. Linux 启动,我执行我需要做的事情。
  4. Linux 关闭,我再次切换到实模式。
  5. 加载原始分区引导扇区并启动我的普通操作系统。

AFAIK,第 4 步将是一项艰巨的任务,在 linux 之前恢复所有设备上的状态,INT13h 可以正常工作吗?我需要恢复中断向量表吗?仅举几例。

这可能在任何现有项目中完成了吗?

0 投票
2 回答
1561 浏览

assembly - 在 16 位实模式下改变中断

我正在尝试更改我的中断表以接管键盘中断。我的最终目标是编写我的新中断例程,将自己复制到 RAM 中并使实模式中断表指向我。

我在网上找到了随机示例代码,但缺少有关如何获取原始中断地址的说明。他们只是在他们的位置上有变量,以及如何将自己放入内存中。

所以我的问题是如何找出或打印到屏幕上的实模式中断表?

和/或如果有人有任何好的代码示例来禁用某些键或在某些键上发出哔哔声,我真的很感激。

谢谢!

0 投票
1 回答
2807 浏览

assembly - 在不同的处理器上运行代码(x86 程序集)

在 x86 的实模式下,需要使用哪些指令在多处理器系统中的不同处理器上运行代码?

(我正在用汇编程序编写一些预启动代码,需要设置某些 CPU 寄存器,并在实际操作系统启动之前在系统中的每个 CPU 上执行此操作。)

0 投票
10 回答
184281 浏览

assembly - 用汇编语言打印出一个数字?

如何打印' al '的值?

0 投票
2 回答
2295 浏览

assembly - 如何使用两个 16 位寄存器制作 20 位地址?

IAPX88 可以处理 1 兆字节内存(20 位寻址),现在我的问题是我们如何通过使用两个 16 位寄存器来制作 20 位地址。请举个例子。

0 投票
4 回答
1363 浏览

assembly - 16位实模式下的物理地址公式:为什么将段乘以16?

physical address=16*selector+offset
但我不知道为什么选择器乘以 16?

0 投票
1 回答
1673 浏览

assembly - 实模式代码中使用的 I/O 端口列表在哪里?

我正在查看一些现有的使用 in 和 out 汇编指令的实模式代码。

我认识一些,但我不知道说明中的大多数不同端口与什么有关。

是否有不同 I/O 端口所指内容的列表?

0 投票
6 回答
14638 浏览

assembly - 实模式内存寻址中的段和偏移量是多少?

我正在阅读有关内存寻址的信息。我阅读了有关段偏移的信息,然后阅读了有关描述符偏移的信息。我知道如何在实模式下计算确切的地址。这一切都很好,但我无法理解偏移量到底是什么?我到处读到:

在实模式下,寄存器只有 16 位,因此您最多只能寻址 64k。为了允许寻址更多内存,地址从 segment * 16 + offset.

在这里我可以理解第一行。我们有 16 位,所以我们最多可以寻址 2^16 = 64k。

但这第二行是什么?段代表什么?为什么要乘以 16?为什么我们添加偏移量。我只是无法理解这个偏移量是什么?任何人都可以解释我或给我这个链接吗?

0 投票
3 回答
43157 浏览

assembly - MOV AX、CS 和 MOV DS、AX 的概念

有人可以解释这三个指令的功能吗?

我知道理论上的代码、数据和额外段是什么,但是:

  1. 它们是如何在这个程序中实现的?

  2. 为什么整个段移动到另一个段?(MOV AX,CSMOV DS,AX)

这两条指令实际上是做什么的?

我可以理解这段代码中所有其他指令的含义,除了突出显示的 3 条指令。

(程序运行良好。它接受输入直到 0 被击中——有 amov ah,01h和 an int 21h,然后它比较al'0'如果al'0',它跳到last,否则它跳到back。)

(编者注:.com程序在 offset 加载100h,所有段寄存器设置为彼此相等。 org 1000h可能是错字,org 100h因为这看起来像一个.com程序。这个程序不会中断,因为它不使用任何绝对地址,只使用相对地址跳跃。)