我想制作一个(非常简单的)操作系统.我目前正在学习显卡.
这是我目前所知的(如果我错了,请纠正我):
我想要做的是直接写入显卡的视频内存而不使用BIOS(因为我想了解事情是如何工作的).所以我有以下问题:
编辑:我正在使用x86.
如果我有一个内存映射的I/O设备,并且我想写入位于0x16D34该0x16D34地址的该设备的寄存器,该地址实际上是一个虚拟地址,CPU将首先将其转换为物理地址,然后写入数据到物理地址.
但对于端口映射I/O设备(例如:串行端口),所以如果我想要写一个寄存器位于地址串口0x3F8,是0x3F8地址的物理地址或虚拟地址?
编辑:我在x86架构上.
根据我的理解,当存在函数重载时使用名称修改,以便可以区分具有相同名称的函数.
但我注意到名称修改也与WinMain()函数一起使用(没有重载).名称变形之后就变成了_WinMain@16.
那么为什么名称修改与WinMain()函数一起使用?
这是我使用的代码:
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我读到每个PCI设备功能都有一组称为配置空间的寄存器,这个配置空间有256字节长。您可以使用以下两个端口映射的 I/O 地址来访问这些寄存器:
CONFIG_ADDRESS 0x3f8
CONFIG_DATA 0x3fc
Run Code Online (Sandbox Code Playgroud)
我的问题是,configuration space寄存器是否也映射到内存空间或IO空间?或者访问它们的唯一方法是通过0x3f8和0x3fc?
我已经读了两个关于溢出意味着什么的定义.
假设我们有以下添加:
11111111
00000001
--------
100000000
Run Code Online (Sandbox Code Playgroud)
我读过的第一个定义是结果不适合8位(在本例中需要9位)的事实,然后这称为溢出.
我读过的另一个定义是,如果我们有两个有符号整数的加法(例如两个补码整数):
10011001
10111011
--------
101010100
Run Code Online (Sandbox Code Playgroud)
然后,如果8位result(01010100)的符号与两个整数的符号不同(在本例中它是不同的),那么这称为溢出.
哪个定义是正确的?