【发布时间】:2022-01-02 20:17:19
【问题描述】:
所以我一直在尝试深入研究 os 开发,并达到了可以执行 c(使用 gcc)的地步。
char* parameter = "test"
videoMemory[1] = *parameter;
videoMemory[2] = 0xcf;
当我执行代码时,除了红色背景(0xcf 指前景色和背景色)外,我什么也没有打印出来。我也试过了
videoMemory[1] = parameter[0];
什么也没得到。 执行时
videoMemory[1] = 'X';
或
videoMemory[1] = "test"[0];
我打印出 X 字符。 我该怎么做才能将存储在变量“参数”中的字符串打印到屏幕上
*编辑:链接到项目 [https://drive.google.com/file/d/1D1xgfbL1uY7zY48Nm-x6QNvZOhh713n1/view?usp=sharing]
已解决
我已经解决了这个问题。我用char stringarray[] = "",效果和预期一样
【问题讨论】:
-
此处信息不足,无法提供帮助。特别是考虑到这段代码背后有一个完整的自定义操作系统,更不用说这是一个脱离上下文的不完整代码 sn-p。
-
我已经按照本教程 [cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf],但除此之外,我的代码基本上是 main 函数中的 sn-p,仅此而已。
-
期望人们阅读 77 页的文档来了解您所做的工作是不合理的。您需要尝试在问题本身中提供minimal reproducible example。
-
videoMemory[1] = "test"[0];打印一个X?videoMemory有什么类型?是uint16_t,所以它包含一个ASCII字符和一个属性字节?如果是uint8_t,那么videoMemory[1]是第二个字节,包含第一个字节的属性。 (假设您处于 VGA 文本模式。) -
如果(本地?)
char stringarray[] = ""与读取指向字符串文字的指针不同,则可能您的内核的.rodata部分不在它应该在的位置。本地数组将在堆栈上构建,如果它小于编译器的决策启发式,通常会带有一些mov-immediate。在这种情况下,它不引用任何静态数据,只引用代码和堆栈。
标签: c assembly operating-system