假设CPU的解码指令
Decoding instruction of hypothetical CPU
在我创建以下问题之前,我已经阅读了一些关于SO的类似问题,但我没有找到问题的答案。
假设我有以下位流 010001 01000 1010100 01100
010001-> 表示指令添加 arg1、arg2、arg3
arg1:01000-> 以 0 开头,因此,arg1 将表示寄存器编号 1000 是小端序,因此寄存器编号索引为 1
arg2:1010100->所以它将是一个内存参数 1-01-0100 01 是一个双字节访问,
arg3: 01100 -> 第三个参数再次以 0 开头,所以它是一个寄存器参数:0-1100 这编码注册3.
如您所见,指令操作码或参数未与字节边界对齐。
例如,正如你在上面看到的 - 操作码需要 6 位,其余 2 位来自字节是第一个参数的一部分。
但是另一个操作码可以从字节中获取 3 或 5 位等位,因此操作码长度不是固定的。
是否存在相同的情况,例如在x86上?
我可以通过使用掩码或位移位来处理它,但我想知道是否有任何有用的模式可以帮助更好地做到这一点?
不,这不太像 x86 指令编码。 x86 使用相当复杂的编码方案,解码起来非常痛苦,特别是如果你想快速完成。
例如,这看起来更接近一些8位摩托罗拉处理器(6800,6809,6811等(。有一个固定的操作码字段,每个操作数确实使生活变得非常简单。你几乎只是生成位掩码来"剥离"指令的每个部分,将它们提供给处理指令该部分的逻辑,然后就可以了。
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- C++:对不存在的命名空间使用命名空间指令
- 无法解码base64+deflate数据
- 函数名是c中该函数的第一条指令的地址吗
- 正在解码MSVC 32位版本的程序集(作业).没有手术做什么
- 错误:无效的预处理指令 #i 的意思是 #if?
- 使用已使用 java 编码的 openssl 解码数据
- 组装指令中乘法的下部和上部是什么
- 如何使用 OpenCV 解码在两个 UWP 应用之间发送的图像字节?
- 错误:(-210:不支持的格式或格式组合)功能'create'中的硬件视频解码器不支持视频源
- OpenMP 与有序和关键指令并行
- C++中的移动分配出现问题.非法指令: 4.
- 嵌套命名空间的"using"指令,但需要命名内部命名空间
- 从原始字节解码协议缓冲区(以 C++为单位)
- FFmpeg——使用硬件加速进行视频解码
- 如何从WIC解码器确定自上而下/自下而上?
- C++CMake编译指令与
- 使用宏扩展的泛型:为什么指令缓存使用不当?
- 假设CPU的解码指令