第6章汇编语言子程序设计(10)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3
源自文库 6.1.2 子程序返回指令 . . 子程序返回指令RET
指令格式: RET [N] 当执行RET时,将返回到主程序中调用子程序语句 的下一语句继续执行程序。由于调用语句有段内 和段间调用之分,相对RET语句就有段内返回和 段间返回的区别。 N为任选项,若选择N,N必须是立即数,且为偶 数。执行返回指令时,先从堆栈弹出断点地址, 然后再调整堆栈指针SP,即: SP←(SP)十N个字节。
第6章
子程序设计
mov ax,12h call display Jmp 1234h
1
子程序
在程序设计过程中,经常会遇到一些功能结构相 同,仅是某些变量的值不同的程序段在程序中 的不同部分多次出现 多次出现,这样的重复编程既烦琐 多次出现 又费时。为此,在设计程序时,可把这些程序 段独立出来,按一定的格式编写,成为可以被 成为可以被 其他程序多次调用的程序。这样的程序段称为 其他程序多次调用的程序 为 子程序或称过程 称过程。通常,调用子程序的程序称 子程序 称过程 为主程序 主程序。主程序和子程序是相对而言的,子 主程序 程序还可调用别的子程序。在编程时,使用子 程序可以减少编程工作量,节省存储空间,并 易于实现程序的模块化,使程序结构清晰和便 于调试。
7
6.3 子程序的参数传递 .
在汇编程序中,参数传递的方法主要有以下几种。 6.3.1 通过寄存器传递参数 . . 这是最常用 最常用的一种方法,使用方便 使用方便,但因受到CPU 最常用 使用方便 寄存器个数的限制,一般用于参数较少的情况。 例6.6 P120 6.3.2 用参数表传递参数 . . 用于大量参数的传递 例 6.7 P121 在一个带有符号的数组中选出绝对值 最大的数,并找出该值所在的位置,存入MAX 和INDEX单元。
2
6 .1
子程序(过程) 子程序(过程)调用 与返回指令
6.1.1 子程序调用指令 . . 子程序调用指令CALL 格式:CALL dst CALL 指令完成2任务: 1.保护断点:把子程序的返回地址 把子程序的返回地址(称为断点地 把子程序的返回地址 址,CALL指令后面1条指令的地址)压入堆栈 压入堆栈 2.转入子程序:把子程序的入口地址送人(CS) 把子程序的入口地址送人( ) 把子程序的入口地址送人 IP,无条件地转移到dst所指的目标地址,去执 行子程序。
5
6.2 子程序的设计方法 .
6.2.1 子程序的定义 . . 类型属性> <过程名 PROC <类型属性 过程名> 过程名 类型属性 ┆ ┊ ;过程体 ┊ <过程名 过程名>ENDP 过程名 过程名 为标识符,又是子程序的人口的符号地址,其写 法和标号的写法相同。 类型属性 可以是 NEAR或 FAR。 NEAR属性为段内调用;FAR属性为段间调用 NEAR属性 可省 属性
6
6.2.3 寄存器的保存与恢复 . . ——保护与恢复现场 保护与恢复现场
[例6.5] 寄存器的保存与恢复示例: 例 . SUBl PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX ┆ POP DX POP CX POP BX POP AX RET SUBl ENDP 用户应仔细考虑哪些寄存器是必须保存的 哪些寄存器是不必要或不应 应仔细考虑哪些寄存器是必须保存的,哪些寄存器是不必要或 应仔细考虑哪些寄存器是必须保存的 哪些寄存器是不必要或不应 保存的。一般子程序中用到的寄存器是要保存的,但是,用来在 该保存的 主程序和子程序之间传递参数的寄存器不能保存 不能保存。 不能保存
4
6.1.2 子程序返回指令 . . 子程序返回指令RET
1.段内返回 . 子程序与主程序在同一段内的返回就是段内返回。 恢复断点:IP←((SP)) SP←(SP)+2 2.段间返回 . 子程序与主程序不在同一段内的返回,便是段间返回。 恢复断点:IP←((SP)) SP←(SP)+2 CS←((SP)) SP←(SP)+2
8
例 6.7 P121
9
6.3 子程序的参数传递 .
6.3.3 通过堆栈传递参数或参数地址 用于多参数、子程序嵌套调用和递归调用 例 6.8 P122 在BDCZ单元中有一个2位十进 制的压缩BCD码,试编程将其转化成十六 进制数,并在屏幕上显示出来
10
例 6.8 P122
11
6.4 嵌套子程序
例6.9 P124
12