汇编语言课件第六章1.ppt
文本预览下载声明
第六章 子程序结构 * * 6.1 子程序的设计方法 过程(子程序)定义伪操作 procedure_name PROC NEAR ( FAR ) …… procedure_name ENDP (1)NEAR属性:调用程序和子程序在同一代码段中 (段内调用) (2)FAR属性:调用程序和子程序不在同一代码段中 (段间调用) code segment main proc far ...... call subr1 ...... ret main endp subr1 proc near ...... ret subr1 endp code ends code segment main proc far ...... call subr1 ...... ret subr1 proc near ...... ret subr1 endp main endp code ends 例6.1 调用程序和子程序在同一代码段中 例6.2 调用程序和子程序不在同一代码段中 segx segment subt proc far ...... ret subt endp ...... call subt ...... segx ends segy segment ...... call subt ...... segy ends 保存与恢复寄存器 subt proc far push ax push bx push cx push dx ...... pop dx pop cx pop bx pop ax ret subt endp 子程序调用(中断调用):隐含使用堆栈保存返回地址 call near ptr subp (1) 保存返回地址 (2) 转子程序 (IP) ← subp的偏移地址 call far ptr subp (1) 保存返回地址 (2) 转子程序 (CS) ← subp的段地址 (IP) ← subp的偏移地址 (IP) (SP)→ (IP) (SP)→ (CS) 子程序的调用和返回 (IP) (SP)→ (CS) (PSW) int n (n : 中断类型号) (1) 保存现场和返回地址 (2) 转中断处理程序 (IP) ← (n*4) (CS) ← (n*4+2) 子程序返回(中断返回): (1)ret (2)iret int 21H 子程序的变量传送 (1)通过寄存器传送变量 (2)通过存储器传送变量 *子程序和调用程序在同一程序模块中,则子程序可 直接访问模块中的变量。 *子程序和调用程序不在同一程序模块中,则有两种 传送方式:建立公共数据区和使用外部符号。 (3)通过地址表传送变量地址 (4)通过堆栈传送变量或变量地址 例6.3 十进制到十六进制的转换程序(通过寄存器传送变量) decihex segment ; 10?16
显示全部