获取汇编指令的编码字节长度

皓哥笔直的背影,就是我前进的方向。(——想说这句话真的好久了)


最近在皓哥的激励下也在慢慢啃CSAPP,今天看到第三章程序的机器级表示,里面有一道习题3.11是这样的:

常常可以看见以下形式的汇编代码行:
xorq %rdx, %rdx
但是在产生这段汇编代码的C代码中,并没有出现EXCLLUSIVE-OR操作
A. 解释这条特殊的EXCLUSIVE-OR指令的效果,它实现了什么有用的操作
B. 更直接地表达这个操作的汇编代码是什么?
C. 比较同样一个操作的两种不同实现的编码字节长度

前两问都比较简单,这就是利用异或将某个寄存器置0的指令,但是第三问直接看懵了,完全没有印象指令的字节长度怎么求,看答案答案也只说xorq是3字节,movq是7字节,怎么来的也没讲,于是去网上搜索了一下,找到一个别人的提问,我也照着自己做了一下

  1. 编写相应的汇编代码
    汇编代码
  2. 对其进行汇编
    as -o test.o test.c
  3. 查看其中的字节
    nm test.o
    结果

可以看到,xorq指令占用0-2共3个字节,movq指令占用 3-9共7个字节。不过具体是如何计算的,我也暂时还没有很明白,欢迎大佬们赐教

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值