• 3.3 ss-sp寄存器,栈的push和pop指令


    汇编语言

    1. 栈

    • 栈是一种具有特殊的访问方式的存储空间
    • 它的特殊性就在于,最后进入这个空间的数据,最先出去。即先进后出

    1.1 栈的基本操作

    • 入栈:入栈就是将一个新的元素放到栈顶
    • 出栈:出栈就是从栈顶取出一个元素
    • 栈顶的元素总是最后入栈,需要出栈时又最先被从栈中取出
    • LIFO(Last In First Out),后进先出

    2. CPU提供的栈机制

    • push(入栈)和pop(出栈)

    在这里插入图片描述

    • 大数据即高位在栈下面,小数据即地位在栈上面
    • 任意时刻,ss:sp指向栈顶元素

    在这里插入图片描述

    //使ss:sp初始指向1000:0010即10000h
    mount c d:masm
    c:
    debug
    r
    mov ax,0123		//ax = 0123h
    push ax		//把ax的数据压入栈中,大数据01在下面,小数据23在上面,此时ss:sp 指向1000EH
    mov bx,2266		//bx = 2266
    push bx		//把bx的数据压入栈中,大数据22在下面,小数据66在上面,此时ss:sp 指向1000CH
    mov cx,1122		//cx = 1122
    push cx		//同上面两步,此时ss:sp指向1000AH,即push指令时,sp = sp - 2
    pop ax		//把栈顶的元素弹出并且赋值给ax,此时ax = 1122h,ss:sp指向1000CH
    pop bx		//同上,此时bx = 2266h,ss:sp指向1000EH
    pop cx		//此时cx = 0123h,ss:sp指向10010h。即pop指令时,sp = sp + 2
    
    r ss		//让ss:sp指向栈顶元素
    1000
    r sp
    0010
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    3. 栈顶超界问题

    • 当栈满的时候再使用push指令入栈,或栈空的时候再使用pop指令出栈,都将发送栈顶超界问题
    • 栈顶超界是危险的
    • 我们自己要操心栈顶超界的问题,要根据可能用到的最大栈空间,来安排栈的大小,防止入栈的数据太多而导致的超界
    • 执行出栈操作的时候也要注意,以防栈空的时候继续出栈而导致的超界

    4. push和pop也可以对内存进行操作

    • push和pop指令是可以在寄存器和内存之间传送数据的
    mov ax,1000
    mov ds,ax		//内存单元的段地址要放在ds中
    push [0]		//将1000:0处的字压入栈中
    pop [2]			//出栈,出栈的数据送入1000:2处
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

    指令执行时,CPU要知道内存单元的地址,可以在push、pop指令中只给出内存单元的偏移地址,段地址在指令执行时,CPU从ds中取得

  • 相关阅读:
    web前端期末大作业 HTML游戏资讯网页设计制作 简单静态HTML网页作品 DW游戏资讯网页作业成品 游戏网站模板
    02- pytorch 实现 RNN
    C# 设计模式 之 创建型模式、结构型模式、行为型模式概述
    SIM卡相关知识介绍
    JS中的BOM
    代码练习-字符串经典题目
    redis问题:三种集群——主从、哨兵、cluster集群;16384槽等
    web大作业 静态网页 HTML+CSS+JavaScript橙色的时尚服装购物商城
    4.新建模块和代码生成
    k8s入门之ConfigMap(九)
  • 原文地址:https://blog.csdn.net/2203_75300307/article/details/136750501