汇编中call指令和其对应的机器码

call这个指令很神奇,他和别的指令不太一样

对比下,当我们执行
mov eax,1
的时候,他的对应机器码是
66 B8 01 00 00 00
这其中“66 B8”对应的是“mov eax,x”
后面的“01 00 00 00”就是“1”在32位中的Little Endian了
所以说,在对mov指令进行汇编时,里面的常数会被直接汇编成机器码

然而call指令比较有意思
这个是一段很简单的汇编代码
Start:
call @F
@@: pop ebx

	call	@F
	nop
	nop
	nop
@@:	pop		ebx
	
	end	Start

然后通过反汇编后,他变成了这个样子
QQ截图20200413220226.png
仔细观察机器码和反汇编代码的对应关系,在汇编代码中,第一行的
call @F
@F: …
被汇编成了机器码
E8 00 00 00 00
欸?“@F”所在地址明明是00401005,为什么没有被汇编成为
E8 05 10 40 00
呢?
再接着看下一个例子,这是汇编代码
call @F
nop
nop
nop
@@: …
被编译器编译后变成了
E8 03 00 00 00
我好像发现了什么,编译器你好坏哦。。。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值