我正在研究一个项目,该项目正在汇编中实现函数并在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指针,我可以很好地找到以空结尾的字符串的结尾。我需要换一种方式吗?一切都必须是指数补偿吗?

最佳答案

如果[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

关于c - 将ebp/esp与edi/esi结合使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15974579/

10-11 16:34