如何通过汇编语言引用传递数组?

时间:2014-04-28 19:33:21

标签: assembly

我有2个功能。一个是致电CountCharDisplayResult,如下所示。我如何将charInput数组作为CountChar函数的引用传递给DisplayResult函数?任何帮助将非常感激。感谢。

CountChar PROC
    pushad

    xor eax, eax
    xor ebx, ebx
    xor edx, edx
    mov esi, 0
    mov ecx, bufSize
L1:
    mov al, buffer[esi]
    mov dl, charInput[eax]
    inc dl

    mov charInput[eax], dl          ; How to pass charInput as reference ????

    inc esi
    loop L1             ; end loop

        popad
        ret
CountChar ENDP



DisplayResult PROC
        pushad
        ; somehow retrieve the charInput from above for display ???
        popad
        ret
DisplayResult ENDP

1 个答案:

答案 0 :(得分:1)

指针是指针是指针。指向数据的指针与指向代码的指针具有相同的位数。无论它们是函数向量还是数据向量,这些位都没有唯一的属性。

你可以用几种方式做到这一点

首先,

DisplayResult PROC,the_vector:dword

mov    eax, the_vector    ; Moves the passed value "the_vector" into eax
call    eax
ret

DisplayResult endp

DisplayResult PROC     pop edx; POP返回向量     流行的; POP功能向量     推edx;保存将由[eax]完成的'ret'的返回向量     jmp eax;跳到eax,这将回到谁打电话给我们 DisplayResult endp

摆脱所有pushad / popad的东西,浪费时间。只需按下所需的寄存器,并尝试仅使用预期会被销毁的寄存器。

汇编语言的目的是利用次要的东西,以便它最终帮助你;否则,请使用C.

DisplayResult的C原型应该是这样的:

extern void DisplayResult(void *);

调用它时,将函数名称转换为void *。像这样:

DisplayResult((void *)my_function);