Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 有没有一种方便的方法可以在结构或其他语言功能中表示x86指令?_Rust - Fatal编程技术网

Rust 有没有一种方便的方法可以在结构或其他语言功能中表示x86指令?

Rust 有没有一种方便的方法可以在结构或其他语言功能中表示x86指令?,rust,Rust,Rust没有“位”数据类型,但是x86指令有一个“字段”,大小为位。是否有任何数据结构可以直接编译为x86指令集或任何二进制协议所需的“内存/字节对齐”,而不是使用逐位操作 操作码1or2字节 Mod-R/M 0或1字节 Mod 7,6位 寄存器/操作码5,4,3位 R/M 2,1,0位 SIB 0或1字节 SS 7,6 指数5,4,3 基数2,1,0 位移0,1,2或4字节 立即0、1、2或4 有没有可以直接编译的数据结构 不,没有与此对应的结构: 操作码1or2字节 也就是说,结构的值不

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

操作码1or2字节 Mod-R/M 0或1字节 Mod 7,6位 寄存器/操作码5,4,3位 R/M 2,1,0位 SIB 0或1字节 SS 7,6 指数5,4,3 基数2,1,0 位移0,1,2或4字节 立即0、1、2或4 有没有可以直接编译的数据结构

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

操作码1or2字节 也就是说,结构的值不能小于或等于一个或两个字节长。结构在编译时具有固定的大小

你的主要选择是:

  • 使用诸如枚举和结构之类的功能。这可能与实际指令的位模式不匹配

  • 制作类似于
    struct指令([u8;4])
    的代码,并实现使用位运算的方法。这将允许您匹配位模式

  • 由于您不想使用逐位运算,并且必须匹配位表示,因此我认为您的问题目前无法以您希望的方式解决

    就我个人而言,我可能会使用enum路径并实现一些方法,将原始指令从实现
    Read
    Write
    的类型解析回字节


    <> P>还有可能对比特字段感兴趣,比如这个C++例子:

    struct S {
        unsigned int b : 3;
    };
    

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

    Rust确实有一个“bit”数据类型,它被称为“boolean”。你的问题很不清楚。你想干什么?你是在读还是写二进制格式?对不起,我不知道rust boolean的大小只有一位,我的英语也很粗糙,我正在读或生成二进制格式,对。你能谈谈rust中的布尔类型吗?捕捉rust的本质。Johnny我认为@WesleyWiser的意思不是rust中的布尔值是一个字节长的1/8,而是它存储一位信息(要么是真的,要么是假的)。是的,它是完全有帮助的,说到时尚,我不喜欢“include”(在文件系统级别上操作),而且我刚从那里得知C++可以声明性地做比特格式,我认为HLL中的每个声明性都是好的,这是一个很好的答案。使用抽象表示(如果您需要一位,请将其表示为一位信息而不是大小),然后根据需要序列化/反序列化为物理格式更容易。