汇编语言第6章讲解.ppt

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 子程序--在一个程序的不同的地方需要多次使用的某个程序段,将其进行独立编制。 调用与返回:在主程序中需要使用该功能时,就转移到子程序执行,执行完后又返回原程序继续执行。 一、调用与返回指令 1、子程序的调用与返回 在汇编语言中,子程序是以“过程”的形式表示。根据被调用过程与调用程序是否在同一个段内,可以分为两种情况。 第6章 子程序设计 主程序与子程序同在一个段内。这时,子程序的调用与返回只需修改指令指针IP。 CODEA SEGMENT ... CALL PROCA AAA: ... ... PROCA PROC ... RET ... PROCA ENDP ... CODEA ENDS (1)段内调用与返回 右图中指令CALL PROCA就是段内调用。 下面CODEB段中的CALL FAR PTR PROCB就是段间调用。 CODEA SEGMENT CODEB SEGMENT ... ... PROCB PROC ... CALL FAR PTR PROCB ... BBB: ...... RET PROCB ENDP CODEB ENDS ... CODEA ENDS (2)段间调用与返回 调用指令与子程序分别在不同的段,这时,需要同时修改CS和IP。 两者都是无条件转移到目标单元,但CALL指令要保存“断点”,而JMP指令不保存断点。 (3)子程序调用指令与转移指令JMP的区别 前述程序结构图中,AAA和BBB就是两条调用子程序指令的断点。断点是调用子程序指令CALL的下一条指令的地址。 执行CALL指令时,先将断点压入堆栈中保存,然后转移到目标单元。 CALL指令的执行对各标志位无影响。 汇编指令书写格式为在 CALL 之后直接书写过程名 2、调用指令 指令格式: CALL 过程名 (1)段内调用 (a) 段内直接调用 例如:CALL SUB1 例如:CALL BX CALL CX CALL WORD PTR 30H[BX][SI] (b)段内间接调用 子程序的起始地址(偏移量)由一个通用寄存器或一个字存储单元提供。 调用指令提供一个双字存储单元的地址,它所指向的双字存储单元内容为被调用过程的起始地址。其中,两个低字节存放偏移量,两个高字节存放段基值。 (b) 段间间接调用 例如:CALL DWORD PTR DISP[BX][DI] 由于在定义过程时,对提供段间调用的过程,已经说明其属性为FAR。因此调用时,在CALL后直接书写过程名,也可以在过程名前面加FAR属性修饰。 (2)段间调用 (a)段间直接调用 例如: CALL PROC_NAME CALL FAR PTR PROC_NAME 3、返回指令 (2)段间返回——指令编码为 CBH 执行该指令,将从堆栈顶部弹出两个字分别送IP和CS中。 根据子程序的类型属性,返回指令也分为段内返回和段间返回。其汇编指令书写形式都是RET,但它们的编码是不相同的。 一个子程序最后执行的指令一定是返回指令,但不一定是程序书写的最后一条指令。 (1)段内返回——指令编码为 C3H 执行该指令,将从堆栈顶部弹出一个字送入IP。 汇编指令格式为:RET n 其中n为一个立即数,长度为2字节。并且是一个偶数。 (1)从堆栈弹出1个字送IP(段内返回)或2个字送IP和CS; (2)执行 SP=(SP)+n 。将堆栈中已经用过的参数(n个字节)弹出舍去. 指令执行过程: (3)带弹出值的返回指令 这条指令既可用于段内返回也可以用于段间返回,但它们的指令编码不同,分别为C2 n和CA n。 二、编

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档