我正在尝试学习如何将单个汇编指令手动转换为OP代码。我以PowerPC指令集为例,该指令集具有固定的4字节指令长度。以下示例是在我的参考文献中编写的:
One effect of fixed-size instructions is you can't load a 32-bit constant in a single instruction:
li r3, 0xabcdef ; ERROR! out of range!
这是我的问题:
1-您如何计算指令的长度?我假设您首先在PPC手册中找到了操作码li
位模式?其余r3, 0xabcdef
呢,如何将它们转换为二进制文件?我怎么知道这种交互的长度超过32位?
2-假设0xabcdef
是一个整数的内存地址,则在对该指令进行编码时,汇编程序会将0xabcdef
转换为其实际的int
值还是对内存进行编码地址本身?
3-在执行之前,这整个指令是否已加载到CPU的一个寄存器中?如果是这样,为什么在64位计算机上会出现问题?他们没有64位寄存器吗?