【问题标题】:'byte ptr' (Assembly) Return type?'byte ptr'(程序集)返回类型?
【发布时间】:2016-03-14 01:57:53
【问题描述】:

这里有经验的编码器,没有组装经验,遇到的问题如下:

在从内存地址 0x10000000 开始的四个字节处,我有四个字节的值 X(例如 0x10203040),在内存地址 (X + 40) 的字节处(例如 0x10203068),我有值 '0xAB '。我想对这个字节执行一个操作(例如'not')。

在汇编中这在语法上是如何完成的?我已经为我得到的编译错误做了很多谷歌搜索。我目前所拥有的是(假设 var1 = 0x10000000):

not byte ptr[dword ptr[var1] + 12]

我已经玩了两个小时尝试各种组合,但整个事情不想用我能想出的任何类型的黑客来编译。我也尝试过使用中间变量,但我的 IDE 对 'dd' 关键字有异常。

温和一点 - 零组装体验。

【问题讨论】:

    标签: assembly x86 masm


    【解决方案1】:

    您不能在一条指令中执行此操作。 x86 指令集仅支持某些寻址模式,而您尝试使用的内存间接寻址模式不是其中之一。

    您必须执行以下操作:

    mov esi, [var1]
    not byte ptr [esi + 12]
    

    【讨论】:

    • 在 Intel-syntax x86 汇编器中,嵌套的 [ ] 总是表明有问题。
    • 是的,它看起来很奇怪,我必须阅读要求两次才能看到他的答案是正确的,但不知何故这在阅读时很痛:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-21
    • 2014-07-09
    • 1970-01-01
    • 2013-08-25
    • 1970-01-01
    • 2011-02-28
    相关资源
    最近更新 更多