我的循环没有按照我的预期执行

时间:2011-12-05 23:21:47

标签: assembly x86 strcat

我正在运行一个调用外部汇编函数的C程序。出于学术目的,我正在尝试strcat。我将两个字符串作为char *参数传递给汇编程序。我将ebp推送到堆栈并将string1和string2分配给edx和ebx,如下所示:

mov edx, [ebp+8]
mov ebx, [ebp+4]

现在剩下的就是:

procStr1:
     cmp BYTE PTR [edx], 0
     jne readStr1
procStr2:
     cmp BYTE PTR [ebx], 0
     jne readStr2
     jmp bottom
readStr1:
    inc edx
    jmp procStr1
readStr2:
    mov BYTE PTR [edx], 'a'
    inc edx
    inc ebx
    jmp procStr2

bottom:
    inc edx
    mov BYTE PTR [edx], 0
    pop ebx
    pop edx
    pop ebp
    ret

我只是通过在string1的末尾添加一个来测试它是否有效。如果我输入'hi'和'bye',我希望通过C程序打印出hiaaa(打印出string1)。相反,无论string2有多大,我通常会在string1之后得到13个。我很感激任何意见,这真的令人难以置信..

1 个答案:

答案 0 :(得分:3)

你做过:

push ebp
mov ebp, esp

在顶部?

如果是这样,您的论据现在可以在以下网址找到:

mov edx, [ebp+8]
mov ebx, [ebp+Ch]  ; 0xC, not 4 -- C-language passes args right-to-left

此外,

bottom:
    inc edx       ; This inc should be removed -- edx already points one
                  ; byte beyond the ultimate copied byte.
    mov BYTE PTR [edx], 0