如何计算指令中的字节数?[复制]

How to compute the number of bytes in an instruction? [duplicate]

提问人:Frostmourne 提问时间:10/13/2022 最后编辑:Peter CordesFrostmourne 更新时间:10/13/2022 访问量:39

问:

今天,我得到的答案是“比较 cs-app 的 'xorq %rdx, %rdx' 和 'movq $0, %rdx' 之间的指令”,它说前面一个需要 3 个字节,最后一个需要 7 个字节。它还说“xorl %edx, %edx”需要 2 个字节,“movl $0, %edx”需要 5 个字节。但我不知道如何计算它。你能帮帮我吗?

程序集 x86-64 机器代码

评论

2赞 Peter Cordes 10/13/2022
到目前为止,如果您还不知道编码,最简单的方法是将它们提供给汇编程序并查看反汇编,例如在 中,因此每条指令的机器代码字节将与它在同一行。(GAS 不会优化成等效但更短的指令,因此与 NASM 不同,它实际上会重现那些不必要的冗长指令。objdump -drwCxor %rdx,%rdxxor %edx,%edx
1赞 Peter Cordes 10/13/2022
同样对于这个特定示例,在 x86 程序集中将寄存器设置为零的最佳方法是什么:xor、mov 或 and?解释了为什么更长(REX 前缀)。对于 s,请参阅 stackoverflow.com/questions/4829937/... - 我的答案中对三个整数 MOV 指令的注释对应于这个 , , 和 10 字节。xorqmovmovlmovqmovabsq $0, %rax

答: 暂无答案