gpt4 book ai didi

c - 在 C 中,如何写入特定的内存位置,例如视频内存 b800,在 DOS 中(真正的 DOS,MS DOS 6.22)

转载 作者:太空狗 更新时间:2023-10-29 17:00:16 25 4
gpt4 key购买 nike

在 C 中,我如何写入特定的内存位置,例如视频内存 b800,在 DOS 下(真正的 DOS,MS DOS 6.22)

我知道 C 没有内置任何东西可以做到这一点,但可能有一些特定于平台的东西,例如可以的 DOS 特定 API 函数。

如果有一个小型演示程序,那就太好了。

我有 Turbo C(TCC.EXE - 不是微型 c 编译器,Turbo C 编译器)

我知道调试可以做到这一点(例如,我知道的一些微小的调试)-f b800:0 FA0 21 CE(将一些感叹号写入命令行)。但我想要一个 C 程序写入 b800:0

最佳答案

地址b800:0000使用一段0xb800和一个偏移量0x0000。这对应于线性地址 0xb8000(注意额外的 0,因为该段向左移动了 4 位)。

protected mode中创建一个指向该地址的指针, 你会用

char *p = (char *)0xb8000;

但是,您很可能在real mode , 所以你需要构造一个 far pointer :

char far *p = (char far *)0xb8000000;

32 位值被分成两个 16 位值,分配给段和偏移量。

可以正常使用这个指针,那么:

*p = '!';

关于c - 在 C 中,如何写入特定的内存位置,例如视频内存 b800,在 DOS 中(真正的 DOS,MS DOS 6.22),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32972051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com