C Linux 从内存中读取/写入字(段、偏移量)

标签 c linux memory offset segment

我正在为硬件分配编写 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/

相关文章:

c - 使用 Msp430fr5969 通过 Tx 发送字符串

linux - 将文件复制到子目录并重命名

r - 无法调整 TCGABiolinks

ios - iOS泄漏:谁负责?

linux - CMA问题(设计错误)

c - Stack ADT实现中难以理解的表达

c - 将 char 数组作为参数传递给 fopen

c - 所有 char 数组都自动以 null 结尾吗?

linux - 树莓派 3 上的 SPI_IOC_MESSAGE(N)

memory - `Console.ReadLine`没有足够的存储空间。