文档详情

汇编语言课件和实验指导第六章.ppt

发布:2017-06-20约字共25页下载文档
文本预览下载声明
第六章 子程序结构 * * ? 过程定义伪操作 ? 子程序的调用与返回 ? 保存与恢复寄存器 ? 子程序的参数传送 ? 子程序的嵌套与递归 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. 子程序的参数传送 例:十六进制到十进制的转换(通过寄存器传送参数) hexidec segment ; 16?10 assume cs: hexidec main proc far start: push ds sub ax, ax push ax repeat: call hexibin ; 16?2 call crlf call binidec ; 2?10 call crlf jmp repeat ret main endp …… …… …… hexidec ends end start hexibin proc near mov bx, 0 newchar: mov ah, 1 int 21h sub al, 30h jl exit cmp al, 10 jl add_to sub al, 27h cmp al, 0ah jl exit cmp al, 10h jge exit add_to: mov cl, 4 shl bx, cl mov ah, 0 add bx, ax jmp newchar exit: ret hexibin endp binidec proc near mov cx, 10000d call dec_div mov cx, 1000d call dec_div mov cx, 100d
显示全部
相似文档