三九宝宝网宝宝教育教学论文

C语言中如何调用汇编子程序

03月03日 编辑 39baobao.com

[C语言中如何调用子程序]C语言中,子程序是通过函数来实现的,一个函数相当于一个有独立功能的子程序,子程序意在体现着main函数的作用。 函数机制的实现通常需要经过设计、声明和调用来完成的。 所有的...+阅读

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

#include

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;

}

用汇编语言编写子程序后如何调用

好意思 一开始没抄有看到”调用子程序zhidao“ 已改正:

data segment

array db '8750423196 $'

data ends

code segment

assume cs:code

main proc far

start:

push ds

sub ax,ax

push ax

mov ax,data

mov ds,ax

call son

ret

main endp

son proc near

mov cx,9

loop2:

mov bx,cx

lea di,array

loop1:

mov al,[di]

cmp al,[di 1]

jle next

xchg al,[di 1]

mov [di],al

next:

inc di

loop loop1

mov cx,bx

loop loop2

output:

lea dx,array

mov ah,9

int 21h

ret

code ends

end start

汇编语言子程序调用

简单点说,call指令在跳转前保存当前指令地址,而jmp一类的指令不保存当前指令的地址。 详细点说: call指令在跳转前会在栈中保存当前的程序计数器(IP)的值(有必要的话还要保存CS),保存完IP的值后,再去执行跳转指令。即相当于: push CS (没有这种指令,有没有这一句还要看调用的类型:far/near) push IP (没有这种指令) jmp [word ptr/dword ptr] ... 这样,程序在执行ret/retf指令时就能从栈中取出IP的值,即相当于: pop IP (没有这种指令) pop CS (没有这种指令,有没有这一句也要看调用的类型) 来继续执行call指令后的其他指令,当然你也可以选择不执行ret,而把call当做jmp来用。这样也没有问题(没人这么干),只不过栈里多了点东西罢了,记得处理就好。 而形如jmp一类的指令只是简单的执行跳转(修改IP的值),并不保存IP的值。

当然跳转后程序也就不知道原来是从哪里跳转到这里来的,自然就无法返回。 当然,这个时候ret指令还是可以用的,因为ret指令只是简单的从栈顶取出一个word然后赋给IP,所以也可以用ret指令来实现jmp的功能(也没人这么干)。如: mov bx,offset s push bx ret 这样就相当于: jmp s 所以说不要只是记一...简单点说,call指令在跳转前保存当前指令地址,而jmp一类的指令不保存当前指令的地址。 详细点说: call指令在跳转前会在栈中保存当前的程序计数器(IP)的值(有必要的话还要保存CS),保存完IP的值后,再去执行跳转指令。即相当于: push CS (没有这种指令,有没有这一句还要看调用的类型:far/near) push IP (没有这种指令) jmp [word ptr/dword ptr] ... 这样,程序在执行ret/retf指令时就能从栈中取出IP的值,即相当于: pop IP (没有这种指令) pop CS (没有这种指令,有没有这一句也要看调用的类型) 来继续执行call指令后的其他指令,当然你也可以选择不执行ret,而把call当做jmp来用。

这样也没有问题(没人这么干),只不过栈里多了点东西罢了,记得处理就好。 而形如jmp一类的指令只是简单的执行跳转(修改IP的值),并不保存IP的值。当然跳转后程序也就不知道原来是从哪里跳转到这里来的,自然就无法返回。 当然,这个时候ret指令还是可以用的,因为ret指令只是简单的从栈顶取出一个word然后赋给IP,所以也可以用ret指令来实现jmp的功能(也没人这么干)。如: mov bx,offset s push bx ret 这样就相当于: jmp s 所以说不要只是记一个指令怎么用,而是要理解一个指令到底是什么原理。

以下为关联文档:

汇编语言子程序调用简单点说,call指令在跳转前保存当前指令地址,而jmp一类的指令不保存当前指令的地址。 详细点说: call指令在跳转前会在栈中保存当前的程序计数器(IP)的值(有必要的话还要保存CS),保...

C语言调用另一个程序调用其他程序有两种方式,一个是直接调用其他模块中的函数,另外一个是用系统调用的方式调用已经编译连接好的可执行文件。 第一种方法的话,无论你用什么工具都是在你的程序里面...

c语言题目 c语言程序中当调用函数时哪个正确c语言程序中,当调用函数时,实参和形参各占一个独立的存储单元。 C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存...

C语言子程序的定义和调用原发布者:jiaozhu95 本节介绍C程序的基本单元--函数。函数中包含了程序的可执行代码。每个C程序的入口和出口都位于函数main()之中。main()函数可以调用其他函数,这些函数执行完...

如何调用中断延时程序要用C语言实现如何做呢哥实在不知道你说的是什么意思。我就按我想的写吧 好久都没有写51了,原谅里面的一些小错误,你自己再动动脑就行了!希望能帮到你,以后互相交流 #include<reg52.h> void init() {...

如何把汇编程序嵌入到C语言中不同编译器嵌入汇编的方式不一样,具体如下: 一、Turbo C , 也就是所说的TC。 1、使用预处理程序的伪指令#asm和#endasm,#asm用来开始一个汇编程序块,而#endasm指令用于该块的结...

汇编语言是怎么调用c语言的程序的一、 参数传递的基本规则(ATPCS(ARM—Thumb Procedure Call Standard)) 1、 参数传递 二、汇编程序、C程序相互调用举例 1、 C程序调用汇编程序 汇编程序的设计要遵守ATPCS(A...

c语言中如何调用汇编程序1、如果汇编程序是可执行文件,比如exe文件,则可以使用system函数直接调用。比如下面的代码,用system()打开windows上的记事本程序。#include #include int main(){system("notepa...

C语言和汇编语言的相互调用这不是很复杂。 一个.c,一个.asm int __stdcall PlusOne(int* i) { return i+1; }.asm .386 .model flat,stdcall option casemap:none include windows.inc include user32....

推荐阅读
图文推荐