第11章 栈(X86汇编教程)

发布者:w2628203123最新更新时间:2015-05-15 来源: 51hei关键字:X86  汇编教程 手机看文章 扫描二维码
随时随地手机看文章
    栈,是什么呢?其实啊,栈,就是一种数据放进内存和从内存读取出来的方法.用栈来操作数据,几乎无需自己操心数据会被保存在内存的什么地方(不出意外的话.....)

    栈操作内存的方法是写入的时候把数据一个一个推进去,写一次推一个数据.而提取数据当然也是一个一个提取出来.注意:提取过的数据就会消失(实际上没有消失,可以再次提取,但....那还不如直接用正常方式操作内存呢..).不像普通内存操作可以反复读取.栈提供了一种"后进先出"的数据操作方法.把最后放进内存的数据最先拿出来.这种内存操作方法在某些方面会有巨大的用处.

    使用栈来操作内存,先在内存中定义一个位置,作为"栈顶",这个定义的方法也没啥,直接把你要作为栈顶的内存地址写进SS:SP寄存器即可.这2个寄存器就是"栈顶指针寄存器组合" (一般系统会自动定义栈顶,无需自己操作,所以这步可以跳过,知道SS:SP寄存器的作用即可.)

    我们用堆栈往内存里面推入数据之后,栈顶就会移动(自动的哟!).所以不用担心会把曾经推进堆栈的数据覆盖(当然,你可别因为这样就拼命往堆栈里边压数据...内存会爆掉的[=_=0])

    CPU用堆栈操作内存的步骤:

            数据入栈:

            1:往内存的[SS:SP]写入数据

            2:新的SP寄存器值=SP寄存器值-入栈数据的长度(单位:字节,一般是字形数据.也就是2个字节)

            数据出栈:

            1:SP寄存器值+出栈数据的长度(同上个括号)

            2:在[SS:SP]读取数据

    然后,用栈操作指令就能把数据推进栈里,或从栈里把数据弄出来....


 指令名                :PUSH
操作数数量         :1
 操作数名             :数据
 指令用途             :把一个数据推进栈里,可以是直接数,也可以是寄存器或内存地址(内存地址的话需要指定推进堆栈里的数据长度)

 指令名                :POP
操作数数量         :1
操作数名             :存放数据的地方
指令用途             :把一个数据从堆栈里提取出来.可以放到寄存器或内存地址里.(此处内容同上面那个括号)
实例:
PUSH AX;把AX里面的数据推进堆栈里
POP BX;把最后推进堆栈的数据读取出来放进BX
内存地址实例:
PUSH WORD [DS:0];那个WORD就是用来指定数据长度的,字形(WORD)为2个字节
POP DWORD [DS:0];4个字节出栈

 
本章就到这里,作业:把4个通用寄存器[AX BX CX DX]都压栈再取回吧!
关键字:X86  汇编教程 引用地址:第11章 栈(X86汇编教程)

上一篇:第13章 标志寄存器(X86汇编教程)
下一篇:第9章 内存操作(X86汇编教程)

推荐阅读最新更新时间:2024-03-16 14:02

X86手机重现江湖!仅售860元有双摄但没全面屏
在先前,Intel就鼎力支持展讯,后者还发布了一款基于Intel 14nm制程和Airmont x86 CPU架构的SC9853i处理器。SC9853i采用了八核心设计,主频为1.8GHz,除了整合Mali-T820 GPU之外,还整合了五模4G+基带。而现在,搭载这款芯片的首款机型要来了,其出自主打海外市场的中国品牌领歌(Leegoo),型号为T5c。   T5c拥有一块5.5英寸1080p IPS屏幕,没有采用全面屏设计,前置不可按压的指纹识别,3GB RAM+32GB ROM,3000mAh电池。   而相机方面,T5c采用双后置设计,1300万像素摄像头,1/3.06英寸传感器,1.12微米像素尺寸,F2.2光圈,另外还
[手机便携]
51单片机原理及汇编教程(二)之汇编常用指令数,数据传输指令及寻址方式
一、内部数据传送指令 1、MOV指令 ① MOV R0 , #20H   #后面是立即数,要和地址区分开,20H是一个16进制的数。这句话的意思是将20H这个数送入寄存器R0中。直接寻址 ② MOV 30H , @R0   R0里面放的数,以这个数位地址,将这个地址里面的数给到30H地址中。间接寻址 ③MOV C,20.4H   位寻址,这个C是PSW程序状态字中的最高位,CY进位位,借位位。 2、访问外部RAM存储器 ① MOV DPTR ,#1234H   DPTR分为DPH和DPL(高8位和低8位),存放在内部RAM的SFR中,这句胡的作用是把立即数给DPTR。 ② MOVX A ,@DPTR   这句话的作用是从外部R
[单片机]
51单片机原理及<font color='red'>汇编</font><font color='red'>教程</font>(二)之<font color='red'>汇编</font>常用指令数,数据传输指令及寻址方式
STM32堆和(Heap & Stack)及SRAM存储使用
编译一个程序,出现下面的信息: 明明程序没有什么内容,为什么变量大小就有RW+ZI=52+1836=1888字节大小了呢,就已经使用了1888字节的SRAM空间。让我们打开map文件: 可以看到每个文件所使用的SRAM大小,比如delay文件使用了4个字节,地址从0x20000014到0x20000017。其中可以看到HEAP和STACK占了大头,分别占了0x00000200和0x00000400的空间。STACK的起始地址是0x20000360,大小是0x00000400,那么最后的地址是0x20000760,刚好等于1888=0x760字节。于是我们就知道SRAM空间用来存放了什么东西了:1、各个文件中声明和定义的全局
[单片机]
STM32堆和<font color='red'>栈</font>(Heap & Stack)及SRAM存储使用
上海科技节:兆芯讲述国产x86解决方案芯路历程
5月19日-26日,2018年全国科技活动周暨上海科技节成功举办,本届上海科技节以“万众创新——向具有全球影响力的科技创新中心进军”为主题,通过1600多场科技活动向大众展现了上海科技创新发展取得的重大成果和突出成就,激发了整个社会对科学技术的热情。 5月25日下午,作为上海科技节系列活动的重要环节之一的“新创发布会”在上海科技馆如期开幕。上海兆芯集成电路有限公司副总经理罗勇博士受邀出席活动,与多位科技大咖同台为公众奉上了精彩的TED演讲。 罗勇博士表示,芯片是信息产业和信息安全的基础,无论是影响大众生活的消费电子,还是与科技发展密切相关的人工智能等高新技术,都需要芯片的支撑。兆芯致力于国产自主可控x86解决方案的设计研发,他指出
[半导体设计/制造]
上海科技节:兆芯讲述国产<font color='red'>x86</font>解决方案芯路历程
X86软件模拟器面世 弥补ARM服务器芯片短板
  在智能手机和平板电脑占据大半江山的处理器巨头ARM意欲挺进服务器市场早已成定局。在今年7月,国外厂商Boston就采用ARM架构,推出内置192核心,整体功耗却只有300瓦的2U服务器产品Viridis。Viridis采用48个Calxeda 四核SoC模块,能够在2U的机箱里提供192个计算内核的绿色服务器(12个Calxeda ECX-1000计算节点)。该SoC包含有内存、10GbE网络InterConnect Fabric、外部10GbE网络接口,管理接口和SATA磁盘接口。根据Boston的介绍,Viridis能体统比传统X86服务器更优的功耗性价比,在性能不变的前提下,功耗只有之前的十分之一。   ARM芯片低功耗是
[单片机]
自研“开花结果”,零跑意图技术输出
“零跑不仅是整车制造商,还会是核心技术输出公司。” 这是零跑汽车创始人、董事长、CEO朱江明在零跑全新架构发布会现场的发言。在本次发布会上,零跑汽车正式发布了第三代中央集成式电子电气架构(LEAP3.0),并将其命名为“四叶草”。 据官方介绍,零跑“四叶草”架构将融合座舱域、智驾域、动力域、车身域,未来基于该架构研发的车型将拥有更高的集成度,可以实现无感OTA、个性化功能集成等。 该架构使控制器数量从42个减少至28个,线束从1800米减少至1500米,数据宽带可从100Mbps增加至1000Mbps,电源管理模式也能从10余种增加至30余种。此外,官方号称使用两颗芯片实现中央超算,具备“高算力、快通讯、低时延”
[汽车电子]
全<font color='red'>栈</font>自研“开花结果”,零跑意图技术输出
STM32堆和(Heap & Stack)及SRAM存储使用
编译一个程序,出现下面的信息: 明明程序没有什么内容,为什么变量大小就有RW+ZI=52+1836=1888字节大小了呢,就已经使用了1888字节的SRAM空间。让我们打开map文件: 可以看到每个文件所使用的SRAM大小,比如delay文件使用了4个字节,地址从0x20000014到0x20000017。其中可以看到HEAP和STACK占了大头,分别占了0x00000200和0x00000400的空间。STACK的起始地址是0x20000360,大小是0x00000400,那么最后的地址是0x20000760,刚好等于1888=0x760字节。于是我们就知道SRAM空间用来存放了什么东西了:1、各个文件中
[单片机]
STM32堆和<font color='red'>栈</font>(Heap & Stack)及SRAM存储使用
恒忆与英特尔在堆式交叉点相变存储技术取得成果
相变存储 (PCM) 是一项结合了现今多种存储产品类型的不同优点的非易失性内存技术,恒忆 (Numonyx) 与英特尔 (Intel) 今天宣布双方在该领域得研究中取得关键性突破。研究人员得以首次演示能够在单一芯片堆栈多层 PCM 阵列的 64Mb 测试芯片,对于随机存取非易失性存储器及存储应用而言,这些发现有助于推出容量更大、功耗更低且尺寸更小的存储装置。 上述发现是 Numonyx 与 Intel 长久以来共同进行的一项研究计划的成果,该计划的目的着重于研究多层式或堆栈式 PCM 单元阵列。双方的研究人员如今已能够演示垂直一体化的存储单元 —— PCMS (相变存储及开关)。PCMS 包含一个 PCM 组件,此组
[网络通信]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved