【问题标题】:using ebp/esp in conjunction with edi/esi将 ebp/esp 与 edi/esi 结合使用
【发布时间】:2013-04-12 14:55:11
【问题描述】:

我正在开发一个项目,该项目在汇编中实现函数并在 C 中调用它们。这样做需要使用 EBP 和 ESP。 [EBP + 8] 指向我想在我的汇编函数中反转的字符串的开头。我打算这样做:

cmp     esi, edi
jge     reversed
mov     al, [esi]
mov     bl, [edi]
mov     [esi], bl
mov     [edi], al
inc     esi
dec     edi
jmp     reverse_string

如果我可以使用 esi 和 edi 指针,我可以找到空终止字符串的结尾。我需要使用不同的方式吗?一切都必须是索引偏移量吗?

【问题讨论】:

  • 由于esiedi用作指针,jge应替换为jae。例如,如果esi0x7fffffff 并且edi0x80000000,则不会翻转字符串,因为有符号数0x7fffffff 大于有符号数0x80000000。指针值应始终被视为无符号数字(除非您正在做一些特殊的调整)。

标签: c function assembly x86 nasm


【解决方案1】:

如果[EBP + 8] 持有字符串指针,您可以将其移动到ESI 并从那里继续。

mov esi,[ebp+8]
mov edi,esi
mov al,0
mov ecx,-1
cld
repne scasb   ; find the NULL terminator
dec edi
.... your original code follows

【讨论】:

  • 好吧由于我在尝试这种方式时遇到的其他问题,我认为这是不对的,但是是的
猜你喜欢
  • 2016-03-20
  • 2011-08-23
  • 2010-12-23
  • 2016-06-07
  • 1970-01-01
  • 2011-01-31
  • 2012-01-11
  • 2013-02-07
相关资源
最近更新 更多