- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
汇编言语——进栈出栈指令_图文.ppt
* * 6.1.2 进栈与出栈指令 栈操作指令以它特有的方式存取数据,属于数据传递类指令,但又与MOV等指令有很大的区别。 PUSH指令 【指令格式】PUSH ?d 【功能】先把SP的值减去2,然后把操作数d指明的字型数据放入以SS为段地址、SP为偏移地址所对应的内存单元中。 【说明】 (1)这是单操作数指令,操作数d可以是包括段寄存器在内的任何字型寄存器,或者内存型寻址方式,但不能是立即寻址,当使用内存型寻址方式时可以使用段跨越。 (2)PUSH指令的功能包括移动栈顶和存入数据两部分,两部分连续完成,密不可分。 (3)操作数d进栈是以减2以后的SP的值作为偏移地址,但程序中不允许出现[SP]的写法。不要与基地址寄存器或变址寄存器用作偏地址时的写法相混淆,也就是说,把PUSH指令理解成下面两条指令的组合是不正确的: SUB SP, 2 MOV [SP], d 因为指令“MOV [SP], d”存在语法错误。 (4)PUSH指令会导致栈顶指针的移动,如果用PUSH指令把很多数据进栈,使SP不断减2,就有可能超出栈的有效范围。在一些高级语言中这种现象会导致堆栈溢出错误,但8088对此并不做任何检测和警告。因此要求编程人员自己注意控制堆栈的大小,估计可能进栈的数据量,以免由于栈溢出导致一些不可预测的后果。 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 三亚租车 / 编辑:krgffffgttt233399 【解】堆栈变化见图6.2,程序段执行完后AX=307CH,BX=4F8AH。 XX 0FFC XX 0FFD XX 0FFE XX 0FFF YY 1000 SP→ SP→ XX 0FFC XX 0FFD 8A 0FFE 4F 0FFF YY 1000 7C 0FFC 30 0FFD 8A 0FFE 4F 0FFF YY 1000 SP→ (a)执行前 (b)PUSH AX后 (c)PUSH BX后
文档评论(0)