【发布时间】:2015-02-23 04:02:59
【问题描述】:
伙计们,这是一个很难回答的问题,因为它涉及很多硬件细节,所以我想把它放到 EE.SE 上,但主要关注的是编程,所以我决定放在这里。
我最近非常怀念(以及渴望回到 CPU 内在函数),所以我决定自制一个 8086 微型计算机板。假设我熟悉 x86 汇编(在一定程度上,正如您将看到的那样)并且我已经知道如何将我的代码放到计算机板上,让我们来解决实际问题。出于了解的目的,我正在使用 NASM,尽管我还没有完全掌握它的语法。
很明显,8086 工作在模式(实模式还没有被称为实模式)的前 1,024 个字节在开始时为 255 个 2+2 字节中断向量分开,所以实际的指令列表从 0x3FF 开始.
这里的问题是因为系统内存分段的怪癖,以及我可能正在编写一个 BIOS 的事实,从系统的角度来看。是否必须设置段寄存器,如果是,我如何确定要放什么?假设我使用 EEPROM 或某种形式的 Flash 来存储我的代码,所以我有类似的东西:
section .text
org 0x0000
; Interrupt vectors reserved
ivt: times 1024 db 0
main:
cli ; Clear out interrupts because no addresses are defined yet
; Problems HERE.
; Set up interrupt addresses
我知道这可能非常糟糕,而且很可能是明显错误的语法,但它说明了我想要表达的观点。我是否必须通过mov CS, blahblahblah 之类的方式手动设置分段寄存器,如果是这样,我如何确定代码主体中不同段/部分出现的地址?
这个问题的标题提到了这样一个事实:虽然我已经做了很多谷歌搜索,但我一生都找不到对 8086 的无操作系统编程的参考。所有来源我可以假设我正在为一个已经设置并计算出中断向量和段等的系统编写代码,而我正在尝试制作一个从头开始做所有事情的仿冒微控制器。
【问题讨论】: