- 1、本文档共47页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
汇编语言 第6章课件
第6章 子程序设计及系统调用; 6.1 调用程序与子程序 ;6.2 调用与返回指令;(2)段内间接调用
执行的操作:(SP)←(SP)-2
((SP)+1,(SP))←(IP)
(IP)←(EA)
其中EA 是由DST的寻址方式所确定的有效地址。
(3)段间直接调用
执行的操作:(SP)←(SP)-2
((SP)+1,(SP))←(CS)
(SP)←(SP)-2
((SP)+1,(SP))←(IP)
(IP)←指定的偏移地址
(CS)←指定的段地址
;(4)段间间接调用
执行的操作:(SP)←(SP)-2
((SP)+1,(SP))←(CS)
(SP)←(SP)-2
((SP)+1,(SP))←(IP)
(IP)←(EA)
(CS)←(EA+2)
其中EA 是由DST的寻址方式所确定的有效地址;;(2)段内带立即数返回
语句格式:RET N(N为偶数)
执行操作: (IP)←((SP)+1,(SP))
(SP)←(SP)+2
(SP)←(SP)+ n
(3)段间返回
语句格式:RET
执行操作:(IP)←((SP)+1,(SP))
(SP)←(SP)+2
(CS)←((SP)+1,(SP))
(SP)←(SP)+2;6.3.1 子程序定义
6.3.2 子程序的调用与返回
6.3.3 现场保护与恢复
6.3.4 参数的传递方式
6.3.5 子程序调用举例
6.3.6 子程序的嵌套与递归
;格式:
过程名 PROC [NEAR/FAR]
┆
过程名 ENDP
说明:过程名是过程入口地址的符号表示,具有三种属性,即段属性、偏移地址属性以及类型属性。而类型属性可指定为NEAR或FAR两种类型。
如:
A PROC NEAR A PROC FAR
┆ ┆
A ENDP A ENDP
;过程属性的定义原则:
1)如调用程序和过程在同一个代码段中,则使用NEAR属性。
2)如调用程序和过程不在同一个代码段中,则使用FAR属性。
注意:一般来说,把主过程看作是DOS的一个远距离调用。;6.3.2 子程序的调用与返回; 程序的正确执行是由子程序的正确调用和正确返回保证的,因此子程序中对堆栈的使用应该特别小心,以免发生错误。 ; 子程序要完成调用程序交给的操作任务,一般要由调用程序传递有关参数,子程序执行之后,要把结果传递给调用程序。
1.利用寄存器传递参数
【例】十进制到十六进制数转换程序。程序要求从键盘取得一个十进制数,然后把该数以十六进制形式在屏幕上显示出来。
;CODE SEGMENT
ASSUME CS: CODE
MAIN PROC FAR
START: PUSH DS
MOV AX,0
PUSH AX
CALL D_B
CALL CRLF
CALL B_H
CALL CRLF
RET
MAIN NEDP
;D_B PROC NEAR
MOV BX,0
NEW: MOV AH,1
INT 21H
SUB AL,30H
JL EXIT
CMP AL,9
JG EXIT
CBW
XCHG AX,BX
MOV CX,10
MUL CX
XCHG AX,BX;; ; ;;;;;;;;【例】编程序实现把十六进制数转换成十进制数的程序。要求把从键盘输入的0--FFFFH的十六进制无符号数转换为十进制数并在屏幕上显示出来。;;;;【例】已知某班N个学生的成绩,试编制一个子程序统计不及格,60~69分,70~79分,80~89分,90~99分及100分的人数,分别存放到以S为首址的单元中。
;CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
MAIN PORC FAR
START: PUSH DS
文档评论(0)