汇编参数传递
来源:互联网 发布:淘宝pc端怎么看微淘 编辑:程序博客网 时间:2024/04/29 17:06
主程序在调用子程序时,往往要向子程序传递一些参数;同样,子程序运行后也经常要把一些结果参数传回给主程序。主程序与子程序之间的这种信息传递称为参数传递。
参数传递有四种方法:寄存器参数传递,约定存储单元参数传递,利用CALL后续区进行参数传递,利用堆栈进行参数传递。
一、寄存器参数传递
优点是实现简单方便,调用方便,但是寄存器个数有限,且寄存器往往还要存放其他数据,所以只适合用于要传递的参数较少的情况。
程序示例,这里就不举例了,利用到这种参数传递的例子有很多。
例如,利用ax传入一个16位数,转化为字符串并输出。
二、利用约定存储单元传递参数
这种数据传递方式,数据在内存中,通常在数据段中,相当于全局变量。例如,使用一个字符串变量作为参数,传入函数,输出一个16进制数。
三、利用堆栈传递参数
实现方法:主程序在调用子程序之前,将需要传递的参数依次压入堆栈,子程序从堆栈中取入口参数;子程序调用结束之前,将需要返回的参数依次压入堆栈,主程序在堆栈中取出参数。
示例:测量字符串长度的子程序,设字符串以0为结束标志
;输入参数通过堆栈传递参数
;输出参数通过寄存器传递参数
data segmentstr db '123456789',0len dw ?data endscode segmentassume ds:data,cs:codestart:mov ax,seg strpush axmov ax,offset strpush axcall strlenmov len,axmov ah,4chint 21hcode endsstrlen procpush bpmov bp,sppush dspush simov ds,[bp+6] ;将串的段值,加载到数据段寄存器mov si,[bp+4] ;将串的偏移,传给si,为读串做准备mov al,0strlen1: cmp al,[si]jz strlen2inc sijmp strlen1strlen2: mov ax,sisub ax,[bp+4]pop sipop dspop bpret 4strlen endpend start四、利用CALL后续区传递参数
数据在代码段中,很少语言使用此方法,但使用方法接近于高级语言。
示例:测量字符串长度的子程序,设字符串以0为结束标志
;输入参数通过CALL后续区传递参数
;输出参数通过寄存器传递参数
data segmentstr db '123456789',0len dw ?data endscode segmentassume ds:data,cs:codestart:call strlendw offset strdw seg strmov len,axmov ah,4chint 21hcode endsstrlen procpush bpmov bp,sppush dspush simov si,[bp+2] ;将子程序返回地址,传给si,方便参数传递mov ds,cs:[si+2] ;将串的段值,加载到数据段寄存器mov si,cs:[si] ;将串的偏移,传给si,为读串做准备mov dx,simov al,0strlen1: cmp al,[si]jz strlen2inc sijmp strlen1strlen2: sub si,dxadd word ptr [bp+2],4;修改返回地址pop sipop dspop bpret 4strlen endpend start
0 0
- 汇编参数传递
- ARM汇编子程序参数传递
- 汇编揭秘C中的参数传递
- 汇编中的参数传递和堆栈平衡
- 汇编和C语言的参数传递
- 汇编中的参数传递和堆栈平衡
- 汇编揭秘C中的参数传递
- ESP,EBP 汇编关于参数的传递
- 汇编中EBP传递参数和变量
- 汇编利用call后续区传递参数
- arm汇编函数调用参数传递规则
- 汇编中参数的传递和堆栈修正
- 汇编中参数的传递和堆栈修正
- 汇编中参数的传递和堆栈修正
- 汇编中参数的传递和堆栈修正
- 汇编中参数的传递和堆栈修正2
- Delphi与汇编笔记(3)------关于参数的传递
- 汇编中参数的传递和堆栈修正
- J2EE--Servlet生命周期与原理
- NordFX诺德外汇推出ZuluTrade平台
- [转]C++拷贝构造函数详解
- PL/SQL简介
- NordFX诺德外汇移动交易终端
- 汇编参数传递
- NSMutableArray和NSArray的相互转换
- 导航js
- NordFX诺德网上外汇平台
- Linux下使用wc统计文件行数
- Jquery 的邮箱校验
- Codeforces 443A Borya and Hanabi(暴力)
- struts2 注解 中文传参乱码
- 【DFS+剪枝】-ZOJ-3631-Watashi's BG