参数传递总结
来源:互联网 发布:相片打印软件推荐 编辑:程序博客网 时间:2024/05/22 11:40
参数传递大概有3种方式,它们是:通过寄存器传递、通过地址表传递以及通过堆栈传递。
用得最多的是第三种传递方式。
1.通过寄存器传递参数。
优点:简单易用。
缺点:寄存器数量有限,所以传递参数个数有限
例子:
SUB_CODE SEGMENT
ASSUME CS:SUB_CODE
SUBPROG PROC FAR
PUSH AX
PUSH DX
MOV AH , 02H
MOV DL , BL
INT 21H
POP DX
POP AX
MOV AH , 4CH
INT 21H
SUBPROG ENDP
SUB_CODE ENDS
; MAIN PROGRAM
STACK_SEG SEGMENT
SPACE DB 100H DUP(?)
STACK_SEG ENDS
DATA_SEG SEGMENT
PARAM DB 2BH
DATA_SEG ENDS
MAIN_CODE SEGMENT
MAIN PROC FAR
ASSUME CS:MAIN_CODE , DS:DATA_SEG , SS:STACK_SEG
START:
MOV BX , DATA_SEG
MOV DS , BX
MOV BL , [PARAM]
CALL FAR PTR SUBPROG
MOV AH , 4CH
INT 21H
MAIN ENDP
MAIN_CODE ENDS
END START
2.通过地址表传递参数
优点:参数个数不受限制
例子:
SUB_CODE SEGMENT
ASSUME CS:SUB_CODE
SUBPROG PROC FAR
PUSH AX
PUSH DX
MOV AH , 02H
MOV DL ,
INT 21H
MOV AH , 02H
MOV DL ,
INT 21H
POP DX
POP AX
MOV AH , 4CH
INT 21H
SUBPROG ENDP
SUB_CODE ENDS
; MAIN PROGRAM
STACK_SEG SEGMENT
SPACE DB 100H DUP(?)
STACK_SEG ENDS
DATA_SEG SEGMENT
PARAM DB 2BH,26H
DATA_SEG ENDS
MAIN_CODE SEGMENT
MAIN PROC FAR
ASSUME CS:MAIN_CODE , DS:DATA_SEG , SS:STACK_SEG
START:
MOV BX , DATA_SEG
MOV DS , BX
MOV BX , OFFSET PARAM
CALL FAR PTR SUBPROG
MOV AH , 4CH
INT 21H
MAIN ENDP
MAIN_CODE ENDS
END START
3.通过堆栈传递参数
使用频率最高
例子:
SUB_CODE SEGMENT
ASSUME CS:SUB_CODE
SUBPROG PROC FAR
PUSH BP
MOV BP , SP
PUSH AX
PUSH DX
MOV AH , 02H
MOV DL ,
INT 21H
MOV AH , 02H
MOV DL ,
INT 21H
POP DX
POP AX
POP BP
MOV AH , 4CH
INT 21H
SUBPROG ENDP
SUB_CODE ENDS
; MAIN PROGRAM
STACK_SEG SEGMENT
SPACE DB 100H DUP(?)
STACK_SEG ENDS
DATA_SEG SEGMENT
PARAM DB 2BH,26H
DATA_SEG ENDS
MAIN_CODE SEGMENT
MAIN PROC FAR
ASSUME CS:MAIN_CODE , DS:DATA_SEG , SS:STACK_SEG
START:
MOV BX , DATA_SEG
MOV DS , BX
MOV BX , OFFSET PARAM
PUSH
PUSH
CALL FAR PTR SUBPROG
MOV AH , 4CH
INT 21H
MAIN ENDP
MAIN_CODE ENDS
END START
用得最多的是第三种传递方式。
1.
优点:简单易用。
缺点:寄存器数量有限,所以传递参数个数有限
例子:
SUB_CODE SEGMENT
ASSUME CS:SUB_CODE
SUBPROG PROC FAR
PUSH AX
PUSH DX
MOV AH , 02H
MOV DL , BL
INT 21H
POP DX
POP AX
MOV AH , 4CH
INT 21H
SUBPROG ENDP
SUB_CODE ENDS
; MAIN PROGRAM
STACK_SEG SEGMENT
SPACE DB 100H DUP(?)
STACK_SEG ENDS
DATA_SEG SEGMENT
PARAM DB 2BH
DATA_SEG ENDS
MAIN_CODE SEGMENT
MAIN PROC FAR
ASSUME CS:MAIN_CODE , DS:DATA_SEG , SS:STACK_SEG
START:
MOV BX , DATA_SEG
MOV DS , BX
MOV BL , [PARAM]
CALL FAR PTR SUBPROG
MOV AH , 4CH
INT 21H
MAIN ENDP
MAIN_CODE ENDS
END START
2.
优点:参数个数不受限制
例子:
SUB_CODE SEGMENT
ASSUME CS:SUB_CODE
SUBPROG PROC FAR
PUSH AX
PUSH DX
MOV AH , 02H
INT 21H
MOV AH , 02H
INT 21H
POP DX
POP AX
MOV AH , 4CH
INT 21H
SUBPROG ENDP
SUB_CODE ENDS
; MAIN PROGRAM
STACK_SEG SEGMENT
SPACE DB 100H DUP(?)
STACK_SEG ENDS
DATA_SEG SEGMENT
PARAM DB 2BH,26H
DATA_SEG ENDS
MAIN_CODE SEGMENT
MAIN PROC FAR
ASSUME CS:MAIN_CODE , DS:DATA_SEG , SS:STACK_SEG
START:
MOV BX , DATA_SEG
MOV DS , BX
MOV BX , OFFSET PARAM
CALL FAR PTR SUBPROG
MOV AH , 4CH
INT 21H
MAIN ENDP
MAIN_CODE ENDS
END START
3.
使用频率最高
例子:
SUB_CODE SEGMENT
ASSUME CS:SUB_CODE
SUBPROG PROC FAR
PUSH BP
MOV BP , SP
PUSH AX
PUSH DX
MOV AH , 02H
INT 21H
MOV AH , 02H
INT 21H
POP DX
POP AX
POP BP
MOV AH , 4CH
INT 21H
SUBPROG ENDP
SUB_CODE ENDS
; MAIN PROGRAM
STACK_SEG SEGMENT
SPACE DB 100H DUP(?)
STACK_SEG ENDS
DATA_SEG SEGMENT
PARAM DB 2BH,26H
DATA_SEG ENDS
MAIN_CODE SEGMENT
MAIN PROC FAR
ASSUME CS:MAIN_CODE , DS:DATA_SEG , SS:STACK_SEG
START:
MOV BX , DATA_SEG
MOV DS , BX
MOV BX , OFFSET PARAM
CALL FAR PTR SUBPROG
MOV AH , 4CH
INT 21H
MAIN ENDP
MAIN_CODE ENDS
END START
- 参数传递总结
- C++ 参数传递总结
- WebApi参数传递总结
- Mybatis参数传递总结
- WebApi参数传递总结
- Android传递参数总结
- mybatis传递参数总结
- mybatis 参数传递总结
- ASP.NET参数传递总结
- ASP.NET参数传递总结
- Java参数传递方式总结
- Java参数传递方式总结
- Java参数传递方式总结
- 工作中的总结(参数传递)
- Delphi 函数参数传递总结
- 工作中的总结(参数传递)
- Java的参数传递总结
- django 参数传递方法总结
- Pthread实现面向对象的线程处理简单框架
- 一个第二书店出现的BUG!
- 填充实心多边形(二)
- 关于句柄
- Unix下的I/O多路复用例子,用于服务器端的构造
- 参数传递总结
- 跨平台需要什么?
- JRE极限精简探求手册[1]——精简一个Swing的即时战略游戏
- pthread&双向链表实现队列
- MS SQL Server 2005/2008系列文章导航
- oracle dbms_stats 包
- Unix Socket通信程序c++封装
- 图片标签之SEO效果
- 8259A PIC 总结