第6章 节 子程序 汇编语言程序设计 .ppt

  1. 1、本文档共113页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章 节 子程序 汇编语言程序设计 .ppt

第6章 子程序 6.1 堆栈 6.2 子程序的基本格式和有关指令 6.3 应用子程序进行编程 6.4 整数输入与输出 6.5 子程序共享的方法 *6.6 递归 本章要点 习题六 ;6.1 堆栈 在汇编语言和机器语言中,堆栈在物理结构上是一段存放数据的连续的内存区域,以及一个称为栈顶指针的专用存储单元。堆栈中只能存入16位的字型数据,存入数据的操作称为“进栈”或“压栈”,已存入的数据也可以取出,称为“出栈”或“弹出”,数据的存取操作由专用指令完成。从逻辑上说,堆栈是一种按“先进后出”原则进行操作的数据结构,栈顶指针用于指出入栈操作和出栈操作的位置。 ; 6.1.1 堆栈段 图6.1是堆栈的物理结构示意图,图中标出的SS和SP是与堆栈密切相关的寄存器,SS存放堆栈所占用内存区域的段地址,SP所指向的位置称为栈顶。 ;【基本格式】 段名 SEGMENT STACK DW n DUP(?) 段名 ENDS 【说明】 (1)保留字STACK是堆栈段的专用符号,SEGMENT后面的保留字STACK表明这个段专供堆栈使用。 (2)段定义中用“DW n DUP(?)”说明堆栈所用内存区的大小为2n字节,其中n是一个常量。可根据程序需要,调节堆栈段的大小。因为堆栈只能存放字型数据,所以习惯上都是用DW伪指令来定义栈的大小。这不并是说用其它伪指令不行。 ; (3)按基本格式定义的栈是一个空栈,栈中没有存放有效数据。 (4)为了使SS和SP在程序执行时取得正确的值,必须在源程序中写一条伪指令: ASSUME SS:堆栈段段名 但不需要像DS和ES一样在程序中用指令进行赋值。对SS和SP的赋值是由操作系统在把执行程序调入内存时由DOS本身完成的,DOS将把SS赋值为堆栈段的段地址,把SP赋值为2n。 ; (3)操作数d进栈是以减2以后的SP的值作为偏移地址,但程序中不允许出现[SP]的写法。不要与基地址寄存器或变址寄存器用作偏地址时的写法相混淆,也就是说,把PUSH指令理解成下面两条指令的组合是不正确的: SUB SP, 2 MOV [SP], d 因为指令“MOV [SP], d”存在语法错误。 (4)PUSH指令会导致栈顶指针的移动,如果用PUSH指令把很多数据进栈,使SP不断???2,就有可能超出栈的有效范围。在一些高级语言中这种现象会导致堆栈溢出错误,但8088对此并不做任何检测和警告。因此要求编程人员自己注意控制堆栈的大小,估计可能进栈的数据量,以免由于栈溢出导致一些不可预测的后果。 ; 6.1.2.2 POP指令 【指令格式】POP ?d 【功能】从SS为段地址、SP为偏移地址对应的内存中取出一个字型数据,送到操作数d指定的位置,然后把SP的值加2。对操作数d的寻址方式要求与PUSH指令相同。 堆栈通常用于临时保存数据。一般做法是先用PUSH指令把需要保存的数据入栈,然后完成一定的指令序列,再用POP指令把原先保存的数据出栈。用堆栈保存数据的特点是不用定义变量,不必关心被保存的数据到底在栈的什么位置,只要保证出栈和进栈的对应关系即可。当CPU中的寄存器不够使用时经常用堆栈临时保存数据。 ; 栈顶所指位置以上的部分是堆栈的空闲区,以下部分是已入栈的数据存放区(见图6.1),例6.1用来说明PUSH指令和POP指令对堆栈的影响。 【例6.1】设AX=4F8AH,BX=307CH,SP=1000H,分别逐条执行下列指令,用内存图的形式画出堆栈的变化情况,并分析程序段执行完后AX和BX寄存器的值。 PUSH AX PUSH BX POP AX POP BX; 【解】堆栈变化见图6.2,程序段执行完后AX=307CH,BX=4F8AH。 ; XX 0FFC XX 0FFC XX 0FFD XX 0FFD SP→ 8A 0FFE XX 0FFE 4F 0FFF XX 0FFF YY 1000 SP→ YY 1000 ? ; 6.1.2.3 PUSHF和POPF指令 【指令格式】PUSHF 【功能】把SP的值

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档