gpt4 book ai didi

c - 汇编将 MOV/MOVZX 和 MOVSX 转换为 C 代码(无内联汇编)

转载 作者:太空狗 更新时间:2023-10-29 17:24:31 27 4
gpt4 key购买 nike

对于 asm 模拟器,我正在尝试编写将 ASM 代码转换为等效工作代码的工作代码。最好的代码是可以在一行或最多两到三行中完成的代码,不在乎关于速度。

根据我的理解。如果用 C++ 完成,MOVZX 将与 MOV.. 相同。

MOV 转换。

MOV ESI,DWORD PTR [ESP+8]

就像

regs.d.esi = *(unsigned int *)(regs.d.esp+0x00000008);

MOVZX 转换。

MOVZX EAX,BYTE PTR DS:[EDI]

就像

regs.d.eax = *(unsigned char *)(regs.d.edi);

几乎是一样的东西,没有任何改变。

现在 MOVSX 我在转换为简单的 C 代码时遇到了麻烦.. 似乎与上面的两个相同.. 除了它试图在值(value)尽可能移动..喜欢

000000C7 变为 FFFFFFC7

最佳答案

movsx 是带有符号扩展的移动。这些设置位是原始值的符号位的副本,如果原始值不是负值,它们将被清除。它的工作方式与您的其他转换一样,只是您需要使用有符号类型而不是无符号类型。

regs.d.eax = *(signed char *)(regs.d.edi); // movsx eax, byte ptr ds:[edi]

关于c - 汇编将 MOV/MOVZX 和 MOVSX 转换为 C 代码(无内联汇编),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7762214/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com