【问题标题】:Finding op code / bytes in assembly在汇编中查找操作码/字节
【发布时间】:2014-02-24 20:21:38
【问题描述】:

对于这些代码行,我需要找到 Op 代码、目标代码的字节数以及执行所需的时钟周期数。假设 value 引用了内存中的一个单词,而 Double 引用了一个双字。

sub wordOp, ax
sub eax,10
add dblOp, 10
add eax,[ebx]

谁能向我解释我如何为代码行获取这些值?

【问题讨论】:

  • 汇编语言(以及一般的操作码)取决于底层平台(编译器、CPU 等)。你用的是什么平台?
  • 英特尔 80X86。还是我需要比这更具体?
  • 编译器(或者至少,你使用的是什么 IDE,是 Visual Studio)?
  • 是的,Visual Studio 来编译它

标签: assembly x86


【解决方案1】:

我不知道它是否有帮助,但似乎您需要做的就是将此代码放在__asm 子句中:

void main()
{
    short a;
    long  b;
    __asm
    {
        sub a,ax
        sub eax,10
        add b,10
        add eax,[ebx]
    }
}

然后,在__asm 子句的第一行放置一个断点,并在调试模式下运行程序。然后,右键单击文本,然后选择Go To Disassembly,它将显示如下:

          sub a,ax
0030139E  sub word ptr [a],ax
          sub eax,10
003013A2  sub eax,0Ah
          add b,10
003013A5  add dword ptr [b],0Ah
          add eax,[ebx]
003013A9  add eax,dword ptr [ebx]
...
003013AB

上面的地址当然是在我的本地程序中,但是代码的大小可以很容易地计算为0x003013AB - 0030139E = D,即13字节。

顺便说一句,我不确定short along b(也可以是int adouble b),所以你需要向给你这个任务的人询问确切的wordOpdblOp 的含义...

【讨论】:

  • @dwelch: 通过将文件保存为.s 并编译它?
【解决方案2】:

我喜欢这个在线汇编器: https://defuse.ca/online-x86-assembler.htm#disassembly

但时钟周期数取决于 cpu 架构。

德克

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 2014-09-17
    • 2012-12-14
    相关资源
    最近更新 更多