第七章 子程序设计 汇编语言课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
对完整段定义格式,过程的缺省属性为near。
用户可以在过程定义时用near或far改变缺省属性。
2020/10/21
河南师范大学计算机与信息技术学院
7
汇编语言程序设计——方法、技术、应用
7.1.2 子程序的调用和返回
过程的正确执行是由子程序的正确调用和正确返回保证的。 80x86的CALL和RET指令完成的就是调用和返回的功能。 为了保证正确性:
2020/10/21
河南师范大学计算序设计——方法、技术、应用
④ 段间间接远调用
格式:CALL DST
执行的操作:
当操作数长度为16位时, PUSH (CS) PUSH (IP) (IP)←(EA) (CS)← (EA+2)
当操作数为32位时,
PUSH (CS)
上述指令格式中,并未P加US上HN(EAERIPP)TR 或 FAR PTR格式的属性操
(1)CALL调用指令
CALL指令分成4种类型(类似JMP):
CALL label
;段内调用、直接寻址
CALL r16(32)/m16(32) ;段内调用、间接寻址
CALL far ptr label ;段间调用、直接寻址
CALL far ptr mem
;段间调用、间接寻址
CALL指令需要保存返回地址:
2020/10/21
河南师范大学计算机与信息技术学院
13
汇编语言程序设计——方法、技术、应用
③ 段间直接远调用
格式:CALL DST
执行的操作: 当操作数长度为16位时, PUSH (CS) PUSH (IP) (IP)←DST指定的偏移地址 (CS)←DST指定的段地址 当操作数为32位时, PUSH (CS) PUSH (EIP) (EIP)←DST指定的偏移地址 (CS)←DST指定的段地址
;有参数段内返回
RET
;无参数段间返回
RET i16
;有参数段间返回
RET指令需要弹出CALL指令压入堆栈的返回地址:
段内返回——出栈偏移地址IP/EIP IP←SS:[SP/ESP], SP/ESP←SP/ESP+2/4
河南师范大学计算机与信息技术学院
11
汇编语言程序设计——方法、技术、应用
① 段内直接近调用
格式:CALL DST
执行的操作:
当操作数长度为16位时, PUSH (IP) (IP)←(IP)+D16
或 (EIP)←((EIP)+D16)AND
000当0F操FF作FH数为32位时, PUSH (EIP) (EIP)←(EIP)+D32
作符,在实际使用时,可(根E据IP具)体←情(况E加A)上它。使用方法可参考JMP
指令的说明。
(CS)← (EA+4)
2020/10/21
河南师范大学计算机与信息技术学院
15
汇编语言程序设计——方法、技术、应用
(2)RET返回指令
根据段内和段间、有无参数,分成4种类型:
RET
;无参数段内返回
RET i16
段内调用——入栈偏移地址IP/EIP SP/ESP←SP/ESP-2/4,SS:[SP/ESP]←IP/EIP
段间调用——入栈偏移地址IP/EIP和段地址CS SP/ESP←SP/ESP-2/4,SS:[SP/ESP]←IP/EIP SP/ESP←SP/ESP-2/4,SS:[SP/ESP]←CS
2020/10/21
要正确选择PROC的属性; 注意子程序运行期间的堆栈状态。
执行CALL指令时,要使返回地址入栈; 执行RET指令时,要使返回地址出栈。
2020/10/21
河南师范大学计算机与信息技术学院
8
汇编语言程序设计——方法、技术、应用
7.1.2 子程序的调用与返回
子程序是具有独立功能的程序模块。 相当于高级语言中的过程。便于模块化程序设计。 当主程序(调用程序)需要执行这个功能时,采用CALL调用指令转 移到该子程序的起始处执行。 当运行完子程序功能后,采用RET返回指令回到主程序继续执行。
1 过程定义伪操作 2 子程序的调用和返回 3 保存与恢复寄存器 4 子程序的参数传递 5 增强功能的过程定义伪操作
2020/10/21
河南师范大学计算机与信息技术学院
3
汇编语言程序设计——方法、技术、应用
汇编语言程序设计——方法、技术、应用
汇编语言程序设计——方法、技术、应用
7.1.1 过程定义伪操作
汇编语言程序设计——方法、技术、应用
第七章 子程序设计
任课教师:陶雪丽 xueli_xl@
汇编语言程序设计——方法、技术、应用
本章内容提要
子程序设计 子程序的嵌套 子程序举例
2020/10/21
河南师范大学计算机与信息技术学院
2
汇编语言程序设计——方法、技术、应用
7.1 子程序设计
6
汇编语言程序设计——方法、技术、应用
7.1.1 过程定义伪操作
80x86的汇编程序用PROC伪操作的类型属性来确定CALL和 RET指令的属性。
对简化段定义格式,在TINY、SMALL、COMPACT、FLAT模 式下,过程的缺省属性为near;在MEDIUM、LARGE和HUGE 存储模式下,过程的缺省属性为far。
2020/10/21
河南师范大学计算机与信息技术学院
12
汇编语言程序设计——方法、技术、应用
② 段内间接近调用
格式:CALL DST
执行的操作:
当操作数长度为16位时, PUSH (IP) (IP)←(EA)
或 (EIP)←(EA)AND 0000FFFFH
当操作数为32位时, PUSH (EIP) (EIP)←(EA)
格式:
过程名 proc [near|far] ...
过程名 endp
过程名(子程序名)为符合语法的标识符,是子程序入口的符 号地址。
属性: NEAR属性(段内近调用)的过程只能被相同代码段的
其他程序调用。 FAR属性(段间远调用)的过程可以被相同或不同代码
段的程序调用。
2020/10/21
河南师范大学计算机与信息技术学院
2020/10/21
河南师范大学计算机与信息技术学院
9
汇编语言程序设计——方法、技术、应用
7.1.2 子程序的调用与返回
CALL(call)调用 RET(return)返回
CALL和RET指令都不影响标志位。
执行演示
2020/10/21
河南师范大学计算机与信息技术学院
10
汇编语言程序设计——方法、技术、应用
用户可以在过程定义时用near或far改变缺省属性。
2020/10/21
河南师范大学计算机与信息技术学院
7
汇编语言程序设计——方法、技术、应用
7.1.2 子程序的调用和返回
过程的正确执行是由子程序的正确调用和正确返回保证的。 80x86的CALL和RET指令完成的就是调用和返回的功能。 为了保证正确性:
2020/10/21
河南师范大学计算序设计——方法、技术、应用
④ 段间间接远调用
格式:CALL DST
执行的操作:
当操作数长度为16位时, PUSH (CS) PUSH (IP) (IP)←(EA) (CS)← (EA+2)
当操作数为32位时,
PUSH (CS)
上述指令格式中,并未P加US上HN(EAERIPP)TR 或 FAR PTR格式的属性操
(1)CALL调用指令
CALL指令分成4种类型(类似JMP):
CALL label
;段内调用、直接寻址
CALL r16(32)/m16(32) ;段内调用、间接寻址
CALL far ptr label ;段间调用、直接寻址
CALL far ptr mem
;段间调用、间接寻址
CALL指令需要保存返回地址:
2020/10/21
河南师范大学计算机与信息技术学院
13
汇编语言程序设计——方法、技术、应用
③ 段间直接远调用
格式:CALL DST
执行的操作: 当操作数长度为16位时, PUSH (CS) PUSH (IP) (IP)←DST指定的偏移地址 (CS)←DST指定的段地址 当操作数为32位时, PUSH (CS) PUSH (EIP) (EIP)←DST指定的偏移地址 (CS)←DST指定的段地址
;有参数段内返回
RET
;无参数段间返回
RET i16
;有参数段间返回
RET指令需要弹出CALL指令压入堆栈的返回地址:
段内返回——出栈偏移地址IP/EIP IP←SS:[SP/ESP], SP/ESP←SP/ESP+2/4
河南师范大学计算机与信息技术学院
11
汇编语言程序设计——方法、技术、应用
① 段内直接近调用
格式:CALL DST
执行的操作:
当操作数长度为16位时, PUSH (IP) (IP)←(IP)+D16
或 (EIP)←((EIP)+D16)AND
000当0F操FF作FH数为32位时, PUSH (EIP) (EIP)←(EIP)+D32
作符,在实际使用时,可(根E据IP具)体←情(况E加A)上它。使用方法可参考JMP
指令的说明。
(CS)← (EA+4)
2020/10/21
河南师范大学计算机与信息技术学院
15
汇编语言程序设计——方法、技术、应用
(2)RET返回指令
根据段内和段间、有无参数,分成4种类型:
RET
;无参数段内返回
RET i16
段内调用——入栈偏移地址IP/EIP SP/ESP←SP/ESP-2/4,SS:[SP/ESP]←IP/EIP
段间调用——入栈偏移地址IP/EIP和段地址CS SP/ESP←SP/ESP-2/4,SS:[SP/ESP]←IP/EIP SP/ESP←SP/ESP-2/4,SS:[SP/ESP]←CS
2020/10/21
要正确选择PROC的属性; 注意子程序运行期间的堆栈状态。
执行CALL指令时,要使返回地址入栈; 执行RET指令时,要使返回地址出栈。
2020/10/21
河南师范大学计算机与信息技术学院
8
汇编语言程序设计——方法、技术、应用
7.1.2 子程序的调用与返回
子程序是具有独立功能的程序模块。 相当于高级语言中的过程。便于模块化程序设计。 当主程序(调用程序)需要执行这个功能时,采用CALL调用指令转 移到该子程序的起始处执行。 当运行完子程序功能后,采用RET返回指令回到主程序继续执行。
1 过程定义伪操作 2 子程序的调用和返回 3 保存与恢复寄存器 4 子程序的参数传递 5 增强功能的过程定义伪操作
2020/10/21
河南师范大学计算机与信息技术学院
3
汇编语言程序设计——方法、技术、应用
汇编语言程序设计——方法、技术、应用
汇编语言程序设计——方法、技术、应用
7.1.1 过程定义伪操作
汇编语言程序设计——方法、技术、应用
第七章 子程序设计
任课教师:陶雪丽 xueli_xl@
汇编语言程序设计——方法、技术、应用
本章内容提要
子程序设计 子程序的嵌套 子程序举例
2020/10/21
河南师范大学计算机与信息技术学院
2
汇编语言程序设计——方法、技术、应用
7.1 子程序设计
6
汇编语言程序设计——方法、技术、应用
7.1.1 过程定义伪操作
80x86的汇编程序用PROC伪操作的类型属性来确定CALL和 RET指令的属性。
对简化段定义格式,在TINY、SMALL、COMPACT、FLAT模 式下,过程的缺省属性为near;在MEDIUM、LARGE和HUGE 存储模式下,过程的缺省属性为far。
2020/10/21
河南师范大学计算机与信息技术学院
12
汇编语言程序设计——方法、技术、应用
② 段内间接近调用
格式:CALL DST
执行的操作:
当操作数长度为16位时, PUSH (IP) (IP)←(EA)
或 (EIP)←(EA)AND 0000FFFFH
当操作数为32位时, PUSH (EIP) (EIP)←(EA)
格式:
过程名 proc [near|far] ...
过程名 endp
过程名(子程序名)为符合语法的标识符,是子程序入口的符 号地址。
属性: NEAR属性(段内近调用)的过程只能被相同代码段的
其他程序调用。 FAR属性(段间远调用)的过程可以被相同或不同代码
段的程序调用。
2020/10/21
河南师范大学计算机与信息技术学院
2020/10/21
河南师范大学计算机与信息技术学院
9
汇编语言程序设计——方法、技术、应用
7.1.2 子程序的调用与返回
CALL(call)调用 RET(return)返回
CALL和RET指令都不影响标志位。
执行演示
2020/10/21
河南师范大学计算机与信息技术学院
10
汇编语言程序设计——方法、技术、应用