- 1、本文档共51页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
汇编语言5-2007课件
第5章 子程序设计;5.1.1子程序设计基本概念;5.1.2 子程序的定义与说明;对简化段定义格式,在微型、小型和紧凑存储模式下,过程的缺省属性为near;
在中型、大型和巨型存储模式下,过程的缺省属性为far
对完整段定义格式,过程的缺省属性为near
用户可以在过程定义时用near或far改变缺省属性;子程序的常见格式;;;子程序功能:实现光标回车换行
dpcrlf proc far ;过程开始
push ax ;保护寄存器AX和DX
push dx
mov dl,0dh ;显示“回车”
mov ah,2
int 21h
mov dl,0ah ;显示“换行”
mov ah,2
int 21h
pop dx ;恢复寄存器DX和AX
pop ax
ret ;子程序返回
dpcrlf endp ;过程结束;ALdisp proc far
push ax ;过程中使用了AX、CX和DX
push cx
push dx
push ax ;暂存ax
mov dl,al ;转换al的高4位
mov cl,4
shr dl,cl
or dl,30h ;al高4位变成3
cmp dl,39h
jbe aldisp1
add dl,7 ;是0Ah~0Fh,还要加上7
aldisp1: mov ah,2 ;显示
int 21h; pop dx ;恢复原ax值到dx
and dl,0fh ;转换al的低4位
or dl,30h
cmp dl,39h
jbe aldisp2
add dl,7
aldisp2: mov ah,2 ;显示
int 21h
pop dx
pop cx
pop ax
ret ;过程返回
ALdisp endp;5.2 子程序设计方法;5.2.1 子程序的调用与返回;主程序与子程序; 子程序调用指令;子程序返回指令;返回指令RET的参数;通常利用堆栈保护现场,通过压栈(push)指令将会在子程序中破坏的寄存器内容、内存单元等压栈保存;
而在返回原断点之前,通过弹出(pop)指令恢复寄存器或内存单元的内容。;5.2.2 现场保护与恢复;5.2.3 子程序的参数传递;子程序计算数组元素的“校验和”
“校验和”是指不记进位的累加
入口参数: 数组的逻辑地址(传址)
元素个数(传值)
出口参数: 求和结果(传值);把参数存于约定的寄存器中,可以传值,也可以传址。
子程序对带有出口参数的寄存器不能保护和恢复(主程序视具体情况进行保护)
子程序对带有入口参数的寄存器可以保护,也可以不保护;但最好一致
例5.6a
入口参数:CX=元素个数,
DS:BX=数组的段地址:偏移地址
出口参数:AL=校验和; .startup
;设置入口参数(含有DS←数组的段地址)
mov bx,offset array
;BX←数组的偏移地址
mov cx,count ;CX←数组的元素个数
call checksuma ;调用求和过程
mov result,al ;处理出口参数
.exit 0;checksuma proc far
xor al,al ;累加器清0
suma: add al,[bx] ;求和
inc bx ;指向下一个字节
loop suma
ret
checksuma endp
end;主程序和子程序直接采用同一个变量名共享同一个变量,实现参数的传递
不同模块间共享时,需要声明
例5.6b
入口参数:
count=元素个数,
array=数组名(含段地址:偏移地址)
出口参数:
result=校验和;
.startup
;设置入口参数(含有DS←数组的段地址)
mov bx,offset array
;BX←数组的偏移地址
mov cx,count ;CX←数组的元素个数
call checksuma ;调用求和过程
mov result,al ;处理出口参数
.exit 0;
;子程序
Checksumb proc far
push ax
push bx
push cx
xor al,al ;累加器清0
mov bx,offset array
;BX←数组的偏移地址
mov cx,count
;CX←数组的元素个数;sumb: add al,[bx] ;求和
inc bx
loop sumb
mov result,al ;保存校验和
pop cx
pop bx
pop ax
ret
check
文档评论(0)