汇编语言与 子程序结构 .ppt
文本预览下载声明
* 第六章 子程序结构 ? 过程定义伪操作 ? 子程序的调用与返回 ? 保存与恢复寄存器 ? 子程序的参数传送 ? 子程序的嵌套与递归 * 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. 子程序的参数传送 * 例:十进制到十六进制的转换(通过寄存器传送参数) decihex SEGMENT ASSUME CS:decihex main proc far start: call decibin call crlf call binihex call crlf mov ah,1 int 21h cmp al,27 jnz start mov ah,4ch int 21h main endp decihex ENDS END start 参数传递方法1 * decibin proc near mov bx,0 newchar:mov ah,1 int 21h sub al,30h jl exit cmp al,9d jg exit cbw xchg ax,bx mov cx,10 mul cx add bx,ax jmp newchar exit: ret decibin endp binihex proc near mov ch,4 rotate: mov cl,4 rol bx,cl mov al,bl and al,0fh add al,30h cmp al,3ah jl printit add al,7h printit:mov dl,al mov ah,2 int 21h dec ch jnz rotate ret binihex endp crlf proc near mov dl,0dh mov ah,2 int 21h mov dl,0ah mov ah,2 int 21h ret crlf endp * 例:累加数组中的元素(通过存储器传送参数) data segment ary dw 1,2,3,4,5,6,7,8,9,10 count dw 10 sum dw ? data ends code segment main proc far
显示全部