c语言中调用汇编程序问题

来源:百度知道 编辑:UC知道 时间:2024/05/05 14:55:13
c主程序如下:
#include<stdio.h>
void main()
{
extern found(int i,int*j,int *k,int *s);
int i,j,k,s[10];
printf("Enter Values of Array:\n");
for(i=0;i<10;i++)
scanf("%d",&s[i]);
i=10;
found(i,&j,&k,s);
printf("\nThe Max_Value is:%d\n",j);
printf("The Place is:%d\n",k);
}

汇编子程序如下:
PUBLIC _FOUND
_TEXT SEGMENT BYTE PUBLIC 'CODE'
ASSUME CS: _TEXT
_FOUND PROC NEAR
PUSH BP
MOV BP,SP
MOV CX,[BP+4]
DEC CX
MOV SI,[BP+10]
LODSW
MOV DX,1
MOV BX,0
COMP: CMP AX,[SI]
JA BIGGER
MOV AX,[SI]
MOV BX,DX
BIGGER: INC SI
INC SI
INC DX
LOOP COMP
MOV DI,[BP+6]
MOV [DI],AX
MOV DI,[BP+8]
MOV [DI],BX
POP BP
RET
_FOUND E

C语言里面的语句found(i,&j,&k,s); 翻译为汇编语言是下面这样的:
PUSH [I]
PUSH J
PUSH K
PUSH [S]
CALL _found

现在看_FOUND的入口代码:
PUSH BP
MOV BP,SP

你现在明白[BP]是什么了吗?是原来的BP
[BP+2]是CALL处的IP
[BP+4]是什么知道吗?就是实际参数S的值

现在明白了吧。