皓哥笔直的背影,就是我前进的方向。(——想说这句话真的好久了)
最近在皓哥的激励下也在慢慢啃CSAPP,今天看到第三章程序的机器级表示,里面有一道习题3.11是这样的:
常常可以看见以下形式的汇编代码行:
xorq %rdx, %rdx
但是在产生这段汇编代码的C代码中,并没有出现EXCLLUSIVE-OR操作
A. 解释这条特殊的EXCLUSIVE-OR指令的效果,它实现了什么有用的操作
B. 更直接地表达这个操作的汇编代码是什么?
C. 比较同样一个操作的两种不同实现的编码字节长度
前两问都比较简单,这就是利用异或将某个寄存器置0的指令,但是第三问直接看懵了,完全没有印象指令的字节长度怎么求,看答案答案也只说xorq是3字节,movq是7字节,怎么来的也没讲,于是去网上搜索了一下,找到一个别人的提问,我也照着自己做了一下
- 编写相应的汇编代码
- 对其进行汇编
as -o test.o test.c
- 查看其中的字节
nm test.o
可以看到,xorq指令占用0-2共3个字节,movq指令占用 3-9共7个字节。不过具体是如何计算的,我也暂时还没有很明白,欢迎大佬们赐教