第第6 6章章子程序设计子程序设计 子程序的结构子程序的结构 子程序的嵌套与递归子程序的嵌套与递归 子程序应用举例子程序应用举例 子程序的结构子程序的结构 子程序的定义子程序的定义 子程序的调用与返回指令子程序的调用与返回指令 子程序的编程原则子程序的编程原则 参数的传递参数的传递 子程序的定义子程序的定义 1 ,便于一个将一些常用的具有通用功能的操作编写成子程序,便于一个或多个程序使用,使程序设计模块化,从而达到代码复用、简化或多个程序使用,使程序设计模块化,从而达到代码复用、简化编程的目的。编程的目的。 2 : 过程定义伪指令: ––其中: 其中: PROC PROC 表示过程开始, 表示过程开始, ENDP ENDP 表示过程结束。表示过程结束。过程名是过程的入口地址,在程序中是唯一的。它应满足标识符命名的规则。过程名是过程的入口地址,在程序中是唯一的。它应满足标识符命名的规则。 FAR FAR 或或 NEAR NEAR 是过程的属性操作符,缺省时为是过程的属性操作符,缺省时为 NEAR NEAR 属性。属性。过程名 PROC [NEAR /FAR ] 过程体 RET 过程名 ENDP 子程序的调用与返回指令子程序的调用与返回指令 1 : 指令格式: 其中:目的操作数其中:目的操作数 DST DST 是子程序名或子程序首地址是子程序名或子程序首地址 2 : 指令格式: 指令功能: 指令功能: RET RET :返回地址出栈送:返回地址出栈送 IP IP寄存器(段内)。寄存器(段内)。 RETF RETF :返回地址出栈送:返回地址出栈送 IP IP寄存器(段内或段间)和寄存器(段内或段间)和 CS CS 寄存寄存器(段间)。器(段间)。 RET n RET n :返回地址出栈送:返回地址出栈送 IP IP寄存器和寄存器和 CS CS 寄存器,再将寄存器,再将 n n个个(必须偶数)字节数据弹出,保持栈平衡(必须偶数)字节数据弹出,保持栈平衡。。 CALL DST CALL DST RET / RETF / RET n RET / RETF / RET n 指令格式指令功能寻址方式 CALL DST CALL NEAR DST SP=SP-2 ;SS:[SP] ← CALL 指令的下一条指令的 IP值IP=IP+D 16(当 DST 为16位) 段内直接调用 CALL FAR DST SP=SP-2 ;SS:[SP] ←返回地址的段地址 SP=SP-2 ;SS:[SP] ←返回地址的偏移值 IP=DST 的偏移地址, CS=DST 的段地址段间直接调用 CALL DST 如: CALL BX SP=SP-2 ;SS:[SP] ← CALL 指令的下一条指令的 IP值IP=DST 中的有效地址 EA (当 DST 为16位) ( IP ← BX 的值) 段内间接调用 CALL DST 如: CALL DWORD PTR[BX] SP=SP-2 ;SS:[SP] ←返回地址的段地址 SP=SP-2 ;SS:[SP] ←返回地址的偏移值 IP=EA 的低 16位, CS=EA 的高16位( IP ← DS:[BX] 的值,CS ← DS:[BX+2] 的值) 段间间接调用 RET IP ← SS:[SP] , SP = SP+2 段内返回 RETF IP ←[SP] ,SP =SP+2 CS ←[SP] , SP= SP+2 段间返回 RET N IP ←[SP] ,SP=SP+2 (段内) CS ←[SP] ,SP=SP+2 (段间) SP ← SP+ n 段内或段间带参数返回 子程序的编程原则子程序的编程原则编写程序必须先分析题目,进行模块的分解,根据功能正确切分程序,并根据题意画流程图,一般将主程序和子程序分别画, 使得程序思路清晰,便于根据流程图编写汇编程序。在编写子程序后,要对子程序说明,子程序说明是为了更好的使用子程序,便于别人使用该子程序时了解子程序的功能和调用方法,子程序说明一般应包括:子程序名、功能、入口参数、出口参数、执行时间等。在子程序中用到的寄存器,在执行子程
第6章子程序设计摘要 来自淘豆网m.daumloan.com转载请标明出处.