微机原理考研试卷?
这个题目其实挺老的,但是既然题主提到了,就写一下供参考吧! 需要说明的是,本答案只包含本题的解题过程和解答,并不包含该题的详细解析(如有详细解析需求,欢迎私信)。原因无他,只是本人时间仓促,且水平有限。还请见谅。 试题:假设你要设计一个位域,要求它的大小是64B.那么位域中前5个字的地址必须连续,请写出设计步骤并给出结果。若设计不出,请给出原因。
解答:我按照我的思路来做一下吧!不知道对不对,仅供参考! 因为64个字节就是64个八位一组的位串,所以我只需要构造8个数组即可。每个数组的元素个数就等于每8个字节对应的一个二进制位。然后这八个数组组成一个整数类型,这样就可以通过整数类型的地址得到每一个数组,最终可以通过每一个数组得到64个字节的内容。
所以关键就是怎么构造出满足条件的八个数组。因为位数不足5位就需要补零,所以最终的结果就是补零后的六十四个字节的数组(也就是64个双字)。
因为要满足前五个整数的地址连续,所以最后一个数组的位置就要在第一个数组后面加32(十进制64)才行。否则的话会乱序执行,这样最后得到的数组就不对了。
#include // 这里为了描述方便,直接使用C语言编写,实际上是用汇编来实现的
typedef uint64_t WORD; // 定义整数类型,在这里就是64个位
uint64_t a[8]; // 声明数组,元素个数等于一个字符串里含的字符个数
memset(a,0,sizeof(a)*8); // 初始化数组,全为0
a[0] = ~((WORD)1 > 7)) & ((WORD)1 > 7) | ((WORD)1 << 26)); // 对已经建成的字符串进行修整,保留末尾26个随机位
}
return a; // 最后返回整个字符串