• 寄存器(内存访问)06 零基础入门学习汇编语言18


    第三章:寄存器(内存访问)06

     

    让编程改变世界

    Change the world by program


     

    push、pop指令

     

    问题3.7

    编程:将10000H~1000FH 这段空间当作栈,初始状态是空的,将 AX、BX、DS中的数据入栈。 思考后看分析。 [caption id="attachment_300" align="aligncenter" width="300"] push、pop指令[/caption]  

    问题3.8

    编程: (1)将10000H~1000FH 这段空间当作栈,初始状态是空的; (2)设置AX=001AH,BX=001BH; (3)将AX、BX中的数据入栈; (4)然后将AX、BX清零; (5)从栈中恢复AX、BX原来的内容。 思考后看分析。 [caption id="attachment_301" align="aligncenter" width="300"] push、pop指令[/caption]   从上面的程序我们看到,用栈来暂存以后需要恢复的寄存器中的内容时 ,出栈的顺序要和入栈的顺序相反,因为最后入栈的寄存器的内容在栈顶 ,所以在恢复时,要最先出栈。  

    问题3.9

    编程: (1)将10000H~1000FH 这段空间当作栈,初始状态是空的; (2)设置AX=002AH,BX=002BH; (3)利用栈 ,交换 AX 和 BX 中的数据。 思考后看分析。 [caption id="attachment_302" align="aligncenter" width="300"] push、pop指令[/caption]  

    问题3.10

    我们如果要在10000H处写入字型数据2266H,可以用以下的代码完成:

    mov ax,1000H

    mov ds,ax

    mov ,ax,2266H

    mov [0],ax

    看题目: 补在10000H处写入字型数据2266H。 __________ __________ __________ mov ax,2266H push ax 要求:不能使用“mov 内存单元,寄存器”这类指令 思考后看分析。   我们看需补全代码的最后两条指令,将ax中的2266H压入栈中,也就是说,最终应由push ax将2266H写入10000H处。 问题的关键就在于:如何使push ax访问的内存单元是10000H。   Push指令是入栈指令。(注意执行过程) 完整的程序:

    mov ax,1000H

    mov ss,ax

    mov sp,2

    mov ax,2266H

    push ax

     

    结论

    push、pop 实质上就是一种内存传送指令,可以在寄存器和内存之间传送数据,与mov指令不同的是,push和pop指令访问的内存单元的地址不是在指令中给出的,而是由SS:SP指出的。 同时,push和pop指令还要改变 SP 中的内容。 我们要十分清楚的是,push和pop指令同mov指令不同,CPU执行mov指令只需一步操作,就是传送,而执行push、pop指令却需要两步操作。 执行push时:先改变SP,后向SS:SP处传送。 执行pop时:先读取SS:SP处的数据,后改变SP。  

    注意

    push、pop 等栈操作指令,修改的只是SP。也就是说,栈顶的变化范围最大为:0~FFFFH。 提供:SS、SP指示栈顶;改变SP后写内存的入栈指令;读内存后改变SP的出栈指令。 这就是8086CPU提供的栈操作机制。  

    栈的综述

     

    1. 8086CPU提供了栈操作机制,方案如下:

    在SS,SP中存放栈顶的段地址和偏移地址; 提供入栈和出栈指令,他们根据SS:SP指示的地址,按照栈的方式访问内存单元。  

    2. push指令的执行步骤:

    SP=SP-2; 向SS:SP指向的字单元中送入数据。  

    3. pop指令的执行步骤:

    从SS:SP指向的字单元中读取数据; SP=SP-2。  

    4. 任意时刻,SS:SP指向栈顶元素。

    5. 8086CPU只记录栈顶,栈空间的大小我们要自己管理。

    6. 用栈来暂存以后需要恢复的寄存器的内容时 ,寄存器出栈的顺序要和 入栈的顺序相反。

    7. push、pop实质上是一种内存传送指令,注意它们的灵活应用。

      栈是一种非常重要的机制,一定要深入理解,灵活掌握。 [buy] 获得所有教学视频、课件、源代码等资源打包 [/buy] [Downlink href='http://kuai.xunlei.com/d/LBXAHKKOVRLY']视频下载[/Downlink]
  • 相关阅读:
    【算法导论】第8章线性时间排序_计数排序、基数排序、桶排序
    c语言中字符串分割函数及实现
    【算法导论】第12章二叉查找树
    【算法导论】第6章堆排序及利用堆建立最小优先级队列
    【算法导论】第11章散列表
    atoi、itoa,strcpy,strcmp,memcpy等实现
    采用链地址法处理冲突构造哈希表
    【算法导论】第7章快速排序
    Warshall传递闭包算法的学习与实现
    矩阵的加、减、乘、除、求逆运算的实现
  • 原文地址:https://www.cnblogs.com/LoveFishC/p/3845994.html
Copyright © 2020-2023  润新知