文档详情

汇编语言第六章讲解.ppt

发布:2017-03-16约6.83千字共27页下载文档
文本预览下载声明
第六章 子程序结构 * * ? 过程定义伪操作 ? 子程序的调用与返回 ? 保存与恢复寄存器 ? 子程序的参数传送 ? 子程序的嵌套与递归 1. 过程定义伪操作 过程名 PROC NEAR ( FAR ) 过程名 ENDP (1)NEAR属性:调用程序和子程序在同一代码段中 (段内调用) (2)FAR属性:调用程序和子程序不在同一代码段中 (段间调用) . . . code segment main proc far …… call subr1 …… ret main endp subr1 proc near …… ret subr1 endp code ends segx segment subt proc far …… ret subt endp …… call subt …… segx ends segy segment …… call far ptr subt …… segy ends 子程序调用:隐含使用堆栈保存返回地址 call near ptr subp (1) 保存返回地址 (2) 转子程序 call far ptr subp (1) 保存返回地址 (2) 转子程序 子程序返回:ret 2. 子程序的调用与返回 (SP)→ (IP) (IP) (CS) (SP)→ 3. 保存与恢复寄存器 subt proc far push ax push bx push cx push dx …… …… pop dx pop cx pop bx pop ax ret subt endp (1) 通过寄存器传送参数 (2) 通过存储器传送参数 (3) 通过地址表传送参数地址 (4) 通过堆栈传送参数或参数地址 (5) 多个模块之间的参数传送 4. 子程序的参数传送 例如:写一个程序要求从键盘取得一个十进制数,然后以十六进制形式在屏幕上显示出来。 我们采用子程序结构,用一个子程序DECIBIN实现从键盘取得十进制数并把它转换为二进制数;另一个子程序BINIHEX把此二进制数以十六进制数的形式在屏幕上显示出来。为避免屏幕上的重叠,另外用CRLF子程序取得回车和换行效果。整个程序结构如右图。该程序的实现 开始 结束 调用DECBIN 调用CRLF 调用BINIHEX 调用CRLF 从键盘取得十 进制数,保存 到BX中 显示回车换行 用16进制数 显示BX中的数 00 decihex segment 01 assume cs:decihex 1 main proc far 2 repeat: 3 call decibin : 4 call crlf 5 call binihex 6 call crlf 7 jmp repeat 8 main endp 0 decibin proc near ;输入的十进数变成二进制 1 mov bx,0 ; 置0 2 newchar: ;循环入口,输入新字符开始 3 mov ah,1 ;输入一个新位数放AL中 4 int 21h ;中断调用21H P471 5 sub al,30h ;数字为ASCII表示,还原成原数减30 6 jl exit ;减30后小于0表示不是数字,结束 7 cmp al,9d ;减30后再与9数比, 8 jg exit
显示全部
相似文档