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

assembly - 段偏移对 bs 段描述符

与 32 位处理器中的段描述符相比,我对理解 8088 中用于物理地址计算的段偏移对之间的区别感到有点困惑。

任何解释将不胜感激。

0 投票
2 回答
1729 浏览

assembly - 8086 实模式下有哪些中断可用?

我已经阅读了有关 BIOS 中断的信息,并且知道它们只能在 8086 实模式下访问。

我的问题:

  • 还有其他可用的中断吗?我已经阅读了有关 DOS 中断的信息,但我很困惑它们是否也可以在实模式下使用,以及 DOS 中断列表是什么。

  • 一旦我们进入保护模式,存储在 0x00 的 BIOS 中断表会发生什么变化?它是替换,还是存在但无法访问?

  • 像 0x13 或 0x19 这样的 BIOS 中断,它们是如何实现的?它是在软件中还是通过处理器?
0 投票
2 回答
3075 浏览

assembly - 为什么在切换到保护模式之前在引导加载程序中测试端口 0x64?

在我的 MIT OS 课程 (686) 中,我发现了一些我不理解的代码。我试图理解boot / boot.Sinb $0x64, %al中的指令。我的理解是它从数据端口 0x64 读取一个字节到AL,端口 0x64 是什么?它正在测试哪个设备或机制繁忙?我对代码忙碌中的评论感到困惑?评论是什么意思,它指的是什么?

0 投票
0 回答
227 浏览

usb - BIOS INT 0x13 功能 8

我试图在 x86 实模式下使用 BIOS 中断 0x13 函数 8 获取 USB 驱动器参数。我需要每个磁道的磁头数(HPC 参数)。我将哪些值传递给寄存器以及结果存储在哪些寄存器中?是否需要进行任何额外的按位计算才能从返回的结果中获取 HPC 值?

0 投票
2 回答
3420 浏览

assembly - 如何在汇编中将普通字节转换为 ascii?

我正在尝试为我的实模式操作系统编写一个将转储内存的函数。我希望字节 0x0a 显示为“0A”,0xf3 显示为“F3”等等。我编写的代码使用了一个包含“0123456789ABCDEF”的表,并使用单个半字节作为偏移量来查找正确的字符。首先它保存值,它位于al. 接下来它al向右移动 4,移除较低的半字节并将较高的半字节向下移动。然后它将表加载到 中di,然后清零ah。接下来,它添加axdi找到偏移量。然后它将值移动到di到 al 中,然后打印出来。然后它遵循相同的步骤,只是它使用低半字节而不是高半字节。但是,当我运行它时,它只会重复打印出“33”,而不是实际的十六进制数字。这是我的代码:

它有什么问题?先感谢您。

0 投票
1 回答
2260 浏览

assembly - 在 16 位实模式汇编中无法清除整个屏幕

我试图在我简单的 16 位实模式操作系统中清除屏幕。下面是代码:

我读了那个设置al为 0 并调用滚动屏幕中断会清理屏幕,但它似乎只会将第一行的颜色更改为灰色。

感谢任何可以解释为什么这不起作用的人。

0 投票
0 回答
960 浏览

assembly - 无法使用 BIOS 中断将光标移动到程序集操作系统中的下一行

我正在制作一个简单的 16 位实模式操作系统,我编写了下面的代码将光标移动到下一行,但它只向下移动了一次,尽管它被多次调用,有无其他之间的命令。

0 投票
1 回答
1189 浏览

assembly - 打印汇编寄存器的十六进制值,将 16 位寄存器移动到 8 位寄存器和其他汇编问题

我正在编写一个函数来打印我的 16 位实模式汇编操作系统中的每个寄存器。我遇到了几个问题:

1 将 16 位寄存器移动到 8 位寄存器

这给了我error: invalid combinations of opcodes and operands. 无论如何我可以做到这一点吗?

2 将值移动到ax影响ah和/或al

还会ah持有 0x5 并al持有 0x10 吗?

3 打印寄存器的十六进制值而不是ASCII码?

这会输出字符“m”而不是 0x4d 或 77 或 1001101 等。将 4d 转换为 0x34 和 0x64 然后打印的唯一选项是什么?

0 投票
1 回答
77 浏览

assembly - 如何在程序集中将值临时存储在一行中?

我正在制作一个 16 位实模式操作系统,我想传递用户输入的命令。我可以输入,但我不确定如何存储生成的字符串,以便以后对其进行解析。有没有比将每个字符放入堆栈然后在需要使用时弹出并反转它们更好的方法?

我的主循环:

顺便说一下,操作系统被称为MOOS

感谢任何能提供帮助的人。

0 投票
1 回答
1514 浏览

assembly - 如何比较汇编中的字符串?

我已经查看了如何比较两个字符串程序集,并且我正在尝试逐个字符进行比较,直到一个字符不匹配并且我似乎无法让我的代码按我想要的方式运行。

我正在制作一个简单的 shell,我从 help 命令开始:

它从堆栈中读取用户输入的字符串。这是用户输入代码:

它使用 BIOS 中断来实现输入和输出。

尽管输入了“帮助”,但它每次都会输出“未知命令”。