我如何将Intel 80386机器代码转换为汇编语言?

Ray*_*Ray 3 x86 assembly intel machine-code disassembly

我被赋予了以下任务:

请考虑以下十六进制值序列:

55 89 E5 83 EC 08 83 E4 F0 31 C9 BA 01 00 00 00 B8 0D 00 00 00 01 D1 01 CA 48 79 F9 31 C0 C9 C3

此字节序列表示32位模式下Intel 80386机器语言的子例程.

  • 执行此子例程中的指令时,它们会在寄存器%ecx和%edx中保留值.有什么价值?

  • C中执行该子程序计算的程序是什么,然后打印由%ecx和%edx的程序计算的值,就像在子程序执行结束时出现的那样.

由于我没有记忆80386指令集,我必须首先将这些操作码字节转换为它们的汇编语言助记符.那么,是否有某个在线参考,一个表格将十六进制值映射到指令等?我查看了英特尔的网站,但什么都找不到.或者有更好的方法来破译这个......?

小智 10

虽然你可以作弊并使用反汇编程序(反汇编程序在学习上不会有太大帮助),但我建议通过阅读英特尔80386手册中的相关章节来实际学习一些内容.从第17章开始.如果/当你遇到困难时,请回到StackOverflow并发布一个问题,说明你到底有多远以及你不明白.

  • WTF?使用反汇编程序是作弊?解码x86指令是一个非常愚蠢的功课.我认为重点是理解指令,而不是它们的编码. (10认同)
  • @roygbiv:如果我希望我的学生学习特定架构的指令编码,我会要求他们*编写反汇编程序*,而不是手工解码.我不认为任何理智的老师会为了指令编码的目的而提供这样的功课.我假设家庭作业的目的是追踪指示.顺便说一句,我会选择比x86更优雅的东西来教他们指令编码.x86指令编码太复杂,不适合学习. (8认同)
  • @Mehrdad - 是的,它是作弊,如果你试图理解机器操作码/他们的编码和翻译到更高级语言(操作码 - >汇编 - > C).如果作业的唯一要点是理解指令,那么教授应该从汇编语言*而不是*机器代码开始.这就是为什么我相信这项任务的目的是掌握一些*并不困难的机器代码.* (4认同)
  • @Ray - 我*给了你一个可以帮助你的链接.你有没有*读*它?我会说至少尝试解码一个或两个指令,试图至少从任务中得到*更多东西*更多*是的,我发布在stackoverflow上他们说下载一个反汇编程序,但我甚至不必做因为他们为我发布了反汇编的字节*. (4认同)