我需要在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
我该如何解决我的问题?谢谢你的帮助。
答案 0 :(得分:2)
基本上你还需要一个内存地址去引用(括号),但你的代码还有一些其他问题。
查看你的代码我假设数组中元素的大小是2个字节,你使用的是cdecl调用约定,并且有一个16位处理器。以下是问题:
以下是修复问题的代码:
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