首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有一种在结构或其他语言特性中表示x86指令的方便方法?

是否有一种在结构或其他语言特性中表示x86指令的方便方法?
EN

Stack Overflow用户
提问于 2017-01-03 17:12:16
回答 1查看 112关注 0票数 1

锈蚀没有“位”数据类型,然而,x86指令有一个“字段”,它的大小为位。是否有任何数据结构可以直接编译到x86指令集或任何二进制协议所要求的“内存/字节对齐”,而不是使用逐位操作?

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-03 19:09:11

是否有可直接编译的数据结构?

不,没有与此相对应的结构:

代码语言:javascript
复制
OpCode 1or2 byte

也就是说,您不能拥有一个值为()的结构--或者是一个或两个字节长的结构。结构在编译时具有固定的大小。

你的主要选择是:

  1. 使用漂亮的锈蚀特性,如枚举和结构。这很可能与实际指令的位模式不匹配。
  2. 制作类似struct Instruction([u8; 4])的内容,并实现使用按位操作的方法。这将允许您匹配位模式。

由于您不想使用按位操作,并且必须匹配位表示,所以我认为您的问题目前无法以您想要的方式解决。

就我个人而言,我可能会使用enum路由和实现方法来解析从实现ReadWrite的类型到字节的原始指令。

您还可能对位字段感兴趣,如下面的C++示例:

代码语言:javascript
复制
struct S {
    unsigned int b : 3;
};

在Rust中没有直接的支持,但是有几个板条箱似乎支持宏来创建它们。也许这是有用的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41448805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档