2

我需要在 C 程序中调用汇编程序。在我的 C 程序中,我有一个数组的地址,在我的汇编程序中,我需要获取数组的第二个索引的值。如果我将数组本身作为参数,对我来说会更容易。你能告诉我如何获得数组第二个元素的内容吗?

在我的 C 程序中,我调用了这个函数:

getIndex(&array[0]);  

如果参数不是地址,我在组装过程中的解决方案是:

PUSH BP
MOV BP,SP
push SI

MOV SI,[BP+4]
ADD CX,SI
ADD SI,2
MOV AX,SI ; AX got the value of the second index of the array

我应该如何解决我的问题?感谢您的帮助。

4

1 回答 1

2

基本上,您还需要一个内存地址取消引用(方括号),但您的代码还存在一些其他问题。

查看您的代码,我假设数组中元素的大小为 2 个字节,您使用的是cdecl调用约定,并且有一个 16 位处理器。以下是问题:

  1. 如果将 SI 推入堆栈,则还应将其弹出
  2. 您将 SI 的值添加到 CX,但从不使用 CX 中的值
  3. 该过程不会恢复调用者的 BP 和 SP,也不会返回调用该过程的位置

这是已修复问题的代码:

push bp
mov bp,sp
push si
mov si,[bp+4] ; si = address of the first element in the array
mov ax,[si+2] ; ax = value of the second element in the array
pop si        ; revert si
mov sp,bp     ; revert the caller's stack pointer
pop bp        ; revert the caller's base pointer
ret           ; jump to the instruction after the call
于 2013-04-14T19:58:54.017 回答