如何计算PUSH指令的机器码

gongbingchen 2007-11-25 03:59:23
我写了几条PUSH指令,反汇编后的机器吗却不同。能否详细说明以下PUSH的机器码该如何计算。十分感谢。

PUSH FFFFFFFF ------> 6A FF
PUSH 00000000 ------> 6A 00
PUSH 12345678 ------> 68 12345678
PUSH eax ------> 56
...全文
1052 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
0绝处逢生0 2009-12-25
  • 打赏
  • 举报
回复
你了解一下指令格式、一地址指令、二地址指令、三地址指令。
霍夫曼编码。你会理解的
xccpp 2008-10-03
  • 打赏
  • 举报
回复
PUSH FFFFFFFF ------> 6A FF
应该是是68 ffffffff
PUSH 00000000 ------> 6A 00
这个对

对于立即数 跟长度有关,用68和6a区分
对于寄存器则都不一样吧
redleaves 2007-11-27
  • 打赏
  • 举报
回复
PUSH有好几种.
专门针对通用寄存器的有8条指令,每条一个字节.加前缀可以区分16位和32位
针对立即数的好像是2条,一条是针对8位数据的,一条是针对16/32位数据的,也是通过前缀区别数据长度.
....
其它的就记不太清楚了.请参考cpu spec..
hztltgg 2007-11-27
  • 打赏
  • 举报
回复
机器码就是做cpu的自己定义的,只能查表吧,没法计算
pptor 2007-11-26
  • 打赏
  • 举报
回复
学习帮顶
loops 2007-11-26
  • 打赏
  • 举报
回复
PUSH机器码应该是查表得到的吧?可以计算出来吗?
hztltgg 2007-11-26
  • 打赏
  • 举报
回复
上面的有点奇怪,不知道你是在什么环境下做到

push ffffffff 和push 00000000 应该是作为16位的立即数编译了 ,6A是16位立即数进栈的指令
push 12345678 是64位的立即数, 58 就是64位立即数进栈的指令
push eax 是eax寄存器进栈,寄存器操作比较常用,给他一个一字节的指令
jjfwenwenti 2007-11-25
  • 打赏
  • 举报
回复
友情帮顶

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧