汇编语言(王爽)-栈及栈操作的实现

栈结构:栈是一种只能在一端插入或删除操作的数据结构

栈有两个基本操作: 入栈和出栈

    入栈: 将一个新的元素放到栈顶。

    出栈: 从栈顶取出一个元素。

栈顶的元素总是最后入栈需要出栈时,又最先被栈取出。

栈的操作规则LIFE(Last in first out 后进先出)

CPU提供的栈机制

    现今的cpu中都有栈的设计

    8086cpu提供相关的指令,支持用栈的方式访问内存空间

    基于8086cpu的编程,可以将一段内存当作栈来使用

PUSH(入栈)和pop(出栈)指令

    push ax将ax中的数据送入栈中

    pop ax从栈顶取出数据送入ax

(以字节为单位对栈进行操作)

例子:


push和pop

8086与栈相关的寄存器

栈段寄存器ss 存放栈顶的段地址

栈顶寄存器sp 存放栈顶的偏移地址(任何时刻)ss:sp组合就是指向栈顶元素

在dedug中加深印象 练习

mov ax,1000H

mov ss,ax

mov sp,0010H

mov ax,001AH

mov bx,001bBH

push ax

push bx

pop ax

pop bx



push和pop指令的执行过程

push ax

(1)sp = sp - 2

(2)将ax中的内容送入到ss:sp指向的内存单元处,ss:sp此时指向新栈顶

pop ax

(1)将ss:sp指向的内存单元处的数据送出ax中

(2)sp = sp+2,ss:sp指向当前栈顶下面的单元,以当前栈顶下面的单元为新的栈顶

注意观察sp的数据

注意在使用栈的时候需要注意栈顶超出栈空间,8086cpu知道栈顶在何处(由ss:sp指示)不知道程序安排的栈空间有多大,我们在编程的的时候要自己超心栈顶越界的问题,要根据可能用到的最大栈空间,来安排栈的大小,防止入栈的数据太多而导致的越界,防止出栈时栈空任然继续出栈而导致越界

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容