1 / 24
文档名称:

汇编第6章子程序结构.ppt

格式:ppt   大小:94KB   页数:24页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

汇编第6章子程序结构.ppt

上传人:n22x33 2017/7/7 文件大小:94 KB

下载得到文件列表

汇编第6章子程序结构.ppt

相关文档

文档介绍

文档介绍:第六章子程序设计
家澄嗅扰逞着誊投难贵外末半瞒先瘟考庙猫代掩衰劲焙殃氢咽钝啊拢糕沁汇编第6章子程序结构汇编第6章子程序结构
7/7/2017
1
第六章子程序设计
子程序设计
一、子程序
在程序设计中,我们会发现一些多次无规律重复的程序段或语句序列。解决此类问题一个行之有效的方法就是将它们设计成可供反复调用的独立的子程序结构,以便在需要时调用。在汇编语言中,子程序又称过程。
调用子程序的程序称为主调程序或主程序。
诬鄙恩稳阑爆巴獭未场薛镍瘩衔权铜阿诲字傣悲徽骏怯惶孩茸砚氮技春锌汇编第6章子程序结构汇编第6章子程序结构
7/7/2017
2

二、子程序调用和返回指令
1、CALL:子程序(过程)调用
与JMP指令类似,CALL指令包括下列4种调用方式:
段内直接调用
段间直接调用
段内间接调用
段间间接调用
段内调用在同一代码段内进行,又称近(Near)调用;
段间调用可以在不同代码段之间进行,又称远(Far)调用。
第六章子程序设计
坯储服卑潮纵晰浓汗腐袖纳坟求豁翔禁巴兆净联允犬圆贫彬策念类匈慨一汇编第6章子程序结构汇编第6章子程序结构
7/7/2017
3
Call指令
语法格式:
CALL ame
; ame与该指令在同一代码段,则为段内直接调用:
; IP进栈,IP = label的偏移地址;
; ame与该指令不在同一代码段,则为段间直接调用:
; CS:IP 进栈,CS:IP = label的分段地址
如:CALL SUB1
CALL reg16/mem16
; 段内间接调用:IP进栈,IP = reg16 / [mem16]
如:CALL BX 或 CALL WORD PTR [BX]
CALL mem32
; 段间间接调用:
; CS:IP 进栈,CS = mem32高字,IP = mem32低字
如:CALL DWORD PTR [BX]
功能描述:
(1)返回地址进栈。
远调用:CS与IP(下一条指令的地址)依次进栈。
近调用:IP(下一条指令的16位偏移地址)进栈。
(2)转移到过程的第1条指令去执行。
远调用:根据操作数,将32位分段地址送CS:IP。
近调用:根据操作数,将16位偏移地址送IP。
对标志位的影响:无。
康巾乍掂憎体楔靴是涧削酸虏补午踊馆迸汐刮陈之贞翱殃正须猛倪界绑辕汇编第6章子程序结构汇编第6章子程序结构
7/7/2017
4

二、子程序调用和返回指令
2、RET指令:过程返回
过程返回分为近(段内)返回和远(段间)返回。
第六章子程序设计
鄙冒笔拐娥浊衷歪舵例阳率抵噎涡玫领承获磺怕悬笑柠赃呛蛮蒋芝疤偏羞汇编第6章子程序结构汇编第6章子程序结构
7/7/2017
5
RET返回指令
语法格式:
RET ; 近返回或远返回
RET imm16 ; 近返回或远返回,并调整堆栈:SP = SP + imm16
功能描述:
RET:返回地址出栈,从而实现转移到返回地址处。
远返回:POP 1个双字到CS:IP。
近返回:POP 1个字到IP。
RET imm16:在返回地址出栈后,CPU立即将imm16加到堆栈指针SP。这种机制用来在返回前将参数从栈中移出(如BASIC对汇编的调用)。
对标志位的影响:无。
说明:RET由汇编器根据其所在过程的类型(NEAR或FAR)决定是近返回还是远返回。缺省为近返回。
捐装露烤痢绿参扫蝉釜源蜗满欧扬讶瓢圈怖拟汗惺民澄励窟鱼桶靶诵睡泌汇编第6章子程序结构汇编第6章子程序结构
7/7/2017
6

三、子程序设计
1、定义:过程定义由PROC与ENDP伪指令实现,
形式如下:
过程名 PROC [NEAR|FAR]
<过程体>
过程名 ENDP
过程名在整个程序中必须是唯一的。
过程名本质上与标号一样,也具有3种属性:段地址、偏移地址和类型(NEAR或FAR)。
PROC后用关键字NEAR、FAR或空,以表示过程的类型(缺省为NEAR)。
原则:同一代码段用Near
不同代码段用Far
第六章子程序设计
叮增又版垦艳烤摆姚絮帘鸟朗舱伞矮洗凰直邱暂耗舀吾抹邵街洱摩檬奶磁汇编第6章子程序结构汇编第6章子程序结构
7/7/2017
7
2、子程序结构
(1)同一代码段
Code segment
Main proc far
……
Ret
Main Endp
Sub1 Proc Near
……
Ret
Sub1 Endp
Code Ends
(2)不同代码段
Code segment
Sub proc far
……
Ret
Sub Endp
……
Call Sub
……
Code En