C语言中如何调用汇编子程序给个例子讲解下

C语言中如何调用汇编子程序给个例子讲解下,第1张

你是指内联汇编吧?比如下面这个例子

#include <stdioh>

int func(int a, int b)

{

 return a - b;

}

int main()

{

 //计算 12-5

 int a = 12, b = 5;  //给定两个数

 int res;    //用来记录结果

 __asm{     //内联汇编

  push b;    //b压栈

  push a;    //a压栈,注意C中函数接受参数的时候入栈是反着的

  call func;   //调用函数func, 返回值保存在eax里

  mov res, eax;  //将eax里的值赋给res

 }

 printf("%d\n", res); //输出结果,得到7

 return 0;

}

你的子程序放的位置不对,修改如下:

DATAS SEGMENT

str1 db 'again$'

DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,SS:STACKS

main proc far

START:

MOV AX,DATAS

MOV DS,AX

call crlf

call crlf

call crlf

MOV AH,4CH

INT 21H

main endp

;====================

crlf proc near

mov ah,9

mov dx,offset str1

int 21h

mov dl,0ah

mov ah,2

int 21h

mov dl,0dh

mov ah,2

int 21h

ret

crlf endp

;==================

CODES ENDS

END START

对于参数个数可变的子程序,当参数不超过4个时,可以使用寄存器R0~R3来进行参数传递,当参数超过4个时,还可以使用数据栈来传递参数

在参数传递时,将所有参数看做是存放在连续的内存单元中的字数据。然后,依次将各名字数据传送到寄存器R0,R1,R2,R3;

如果参数多于4个,将剩余的字数据传送到数据栈中,入栈的顺序与参数顺序相反,即最后一个字数据先入栈

再看看别人怎么说的。

以上就是关于C语言中如何调用汇编子程序给个例子讲解下全部的内容,包括:C语言中如何调用汇编子程序给个例子讲解下、汇编子程序的问题、在汇编语言程序设计中,主程序与子程序之间进行参数传递的方法有哪些等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9639461.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存