锈蚀没有“位”数据类型,然而,x86指令有一个“字段”,它的大小为位。是否有任何数据结构可以直接编译到x86指令集或任何二进制协议所要求的“内存/字节对齐”,而不是使用逐位操作?
OpCode 1or2 byte
Mod-R/M 0 or 1 byte
Mod 7,6 bit
Reg/OpCode 5,4,3 bit
R/M 2,1,0 bit
SIB 0 or 1 byte
SS 7,6
Index 5,4,3
Base 2,1,0
Displacement 0,1,2 or 4 byte
Immediate 0,1,2 or 4发布于 2017-01-03 19:09:11
是否有可直接编译的数据结构?
不,没有与此相对应的结构:
OpCode 1or2 byte也就是说,您不能拥有一个值为()的结构--或者是一个或两个字节长的结构。结构在编译时具有固定的大小。
你的主要选择是:
struct Instruction([u8; 4])的内容,并实现使用按位操作的方法。这将允许您匹配位模式。由于您不想使用按位操作,并且必须匹配位表示,所以我认为您的问题目前无法以您想要的方式解决。
就我个人而言,我可能会使用enum路由和实现方法来解析从实现Read和Write的类型到字节的原始指令。
您还可能对位字段感兴趣,如下面的C++示例:
struct S {
unsigned int b : 3;
};在Rust中没有直接的支持,但是有几个板条箱似乎支持宏来创建它们。也许这是有用的。
https://stackoverflow.com/questions/41448805
复制相似问题