2013-04-12 42 views
1

使用ebp/esp我正在开发一个项目,它正在实现汇编中的函数并在C中调用它们。要做到这一点,需要使用EBP和ESP。 [EBP + 8]指向我想在我的汇编函数中反转的字符串的开头。我要做到这一点:使用ebp/esp与edi/esi

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指针。我需要用不同的方式吗?一切都必须是索引偏移吗?

+1

由于'esi'和'edi'被用作指针,'jge'应该被替换为'jae'。例如,如果esi为0x7fffffff而edi为0x80000000,则字符串不会翻转,因为有符号数字“0x7fffffff”大于有符号数字“0x80000000”。指针值应该始终被视为无符号数字(除非您正在做一些特殊的调整)。 – nrz

回答

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 
+0

好吧由于我以这种方式尝试时遇到的其他问题,我认为这是不对的,但是 – b15