我正在为硬件分配编写 Linux Bootstrap ,我知道我需要创建一个函数来从/向内存读取/写入单词。我无法确定我是否在正确的轨道上,任何帮助都会很棒。我会测试这些功能,但目前这对我来说是不可能的,因为我需要先构建核心功能,然后才能将所有内容放在一起。我得到了 get_byte(segment,offset)/put_byte(char,segment,offset),我的老师用汇编编码并导出到 C,验证它们可以工作。
unsigned short get_word(unsigned short segment, unsigned short offset)
{
unsigned short word, low, hi;
low = get_byte(segment, offset);
high = get_byte(segment, offset+1);
word = low+hi;
return word;
}
不知道上面说的对不对。我知道 hi 和 low 需要结合起来,可以添加还是我应该简单地做 low & hi 然后返回那个结果?如果我完全偏离基地,请告诉我。 offset 是 unsigned short 是正确的还是应该是 int?
int put_word(unsigned short word, unsigned short segment, unsigned short offset)
{
unsigned short low, hi;
low = word | offset;
hi = word | offset+1
put_byte(segment, low);
put_byte(segment, hi);
return 0;
}
我不知道上面的代码是否接近正确,但这是我最好的猜测。
有人知道解决方案或有任何提示吗?这些功能应该是非常基本的,但我被卡住了,需要继续我作业的实际部分。
更新 (12:46):修复了 put_byte(),如下所述,仅接受两个参数是没有意义的,已修复。我为我的错误道歉。
最佳答案
在 get_word()
中:
word = (high << 8) | low
在 put_word()
中:
low = word & 0xff;
hi = word >> 8;
put_byte(low, segment, offset);
put_byte(hi, segment, offset+1;
我怀疑 put_byte
是否像您所说的那样只接受两个参数。这没有意义。
关于C Linux 从内存中读取/写入字(段、偏移量),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4809762/