sui*_*yom 1 cpu assembly operating-system 8085
首先,我不了解现代CPU和操作系统。为此,我将针对intel 8085处理器进行解释。当然,我希望你想象有一个操作系统可以在intel 8085上运行。
我们有这样的汇编代码:
MVI A,16
MVI B,16
ADD B
HLT
Run Code Online (Sandbox Code Playgroud)
这段代码非常简单。当此代码运行时,它会执行以下操作: 将数字 16 加载到 intel 8085 处理器的寄存器 a 和 b 中。然后将这两个寄存器的值相加。
当然,当我们尝试在操作系统中运行这段代码时,很可能什么也不会发生。
我想问的是:如何在操作系统上运行不包含任何系统调用(或任何特定于操作系统)的代码(绕过操作系统)?我不希望操作系统在执行此操作时崩溃。
我想问的是:如何在操作系统上运行不包含任何系统调用(或任何特定于操作系统)的代码(绕过操作系统)?我不希望操作系统在执行此操作时崩溃。
简单计算机(例如使用8085 CPU的计算机)
在此类计算机上,操作系统只是一组被调用的函数 - 要么使用操作call,要么使用特定的系统调用操作(在 8086 CPU 上:)int x。
如果您int 10h在 MS-DOS 计算机上调用(作为示例),则会调用一个函数(所谓的中断处理程序)。该函数使用操作和视频 RAM 来访问显卡out(其编写方式与任何普通 RAM 相同;在 8085 上,相应的指令将被命名为stax d)。
您的程序可以“简单地”执行与操作系统(中断处理程序)相同的步骤,而不是调用int 10h.
然而,它并不是真的“简单”:我认为在 MS-DOS 计算机上,向屏幕写入一些文本可能需要大约 300 条指令(取决于您是否想支持光标移动、滚动、换行符处理等...) 。
现代台式计算机(运行现代操作系统)
简单的回答:你不能。
现代 CPU 具有安全和保护功能:
此类 CPU 包含一个寄存器,其中包含应用程序、中断或操作系统是否正在运行的信息。
当应用程序运行时,CPU知道应用程序正在运行;当应用程序执行系统调用(例如使用指令int x)时,CPU 知道操作系统现在正在运行。
CPU(例如内存管理单元)的保护功能不允许您在应用程序运行时访问硬件(例如显示器)。
因此,如果要访问硬件,就必须进行系统调用。(因为操作系统被允许访问硬件。)