堆栈是存储器中专用的缓冲区,用于暂存寄存器数据或地址指针,push/pop就用于堆栈的操作,这两个指令一般用在:
1、子程序调用,为了保护现场,把所要用的寄存器中的内容先暂时保存起来,在子程序调用结束之前,按照先进后出的原则,把数据恢复。
2、有时候,需要临时用一下某些寄存器,也可用一下,凭个人喜好;
这两个指令必须成对使用(特殊用途除外),你只要压入了那些东西,并且知道他们的顺序就行了,所操作的是字符还是数据,就不用知道了。
堆栈操作指令
堆栈是一个先进后出的主存区域,位于堆栈段中,使用SS段寄存器记录器段地址。栈只有一个出口,即当前栈顶。栈顶是地址较小的一端(低端),它用堆栈指针寄存器SP指定。堆栈的两种基本操作,对应两条基本指令:
(1)、进栈指令push
push reg/mem/seg;sp<-sp-2,ss<-reg/mem/seg
进栈指令先使堆栈指令sp减2,然后把一个字操作数存入堆栈顶部。堆栈操作的对象只能是字操作数,进栈时底字节存放于低地址,高字节存放于高地址,sp相应向低地址移动两个字节单元。
push AX
PUSH [2000H]
PUSH CS
(2)、出栈指令pop
pop reg/seg/mem;reg/seg/mem<-ss:[sp],sp<-sp+2
出栈指令把栈顶的一个字传送至指定的目的操作数,然后堆栈指针sp加2。目的操作数应为字操作数,字从栈顶弹出时,低地址字节送低字节,高地址字节送高字节。
pop AX
POP [2000H]
POP SS堆栈可以用来临时存放数据,以便随时恢复它们。也常用于子程序见传递参数。
注意几点:
(1)、因为堆栈指针sp总是指向已经存入数据的栈顶(不是空单元),所以PUSH指令是将(SP)减2,后将内容压栈(即先修改SP是指指向空单元,后压入数据),而POP是先从栈顶弹出一个字,后将堆栈指针SP加2.
(2)、PUSH CS是合法的,但是POP CS是不合法的。
(3)、因为SP总是指向栈顶,而用PUSH和POP指令存取数时都是在栈顶进行的,所以堆栈是先进后出或叫后进先出的。栈底在高地址,堆栈是从高地址向低地址延伸的,所有栈底就是最初的栈顶。
(4)、用PUSH指令和POP指令时只能按字访问堆栈,不能按字节访问堆栈。
(5)、PUSH和POP指令都不影响标志。
转自:http://bbchylml1988.blog.51cto.com/1456746/316554
相关推荐
本篇讲解将详细介绍Linux条件变量的基本概念、使用方法及其相关函数。 首先,条件变量是一种线程间通信的同步机制,可以用来阻塞一个线程,直至某个条件为真。在使用条件变量时,线程通常会先获取一个与条件变量...
下面将详细讲解这两个功能的实现方法。 首先,我们来看如何实现字符串去重。这个功能通常涉及到对字符数组的处理。我们可以用一个辅助数组记录每个字符是否出现过,然后遍历原始字符串,只保留未出现过的字符。以下...
《Linux多线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。...
2. **数组操作**:讲解索引数组、关联数组的创建、遍历和修改,以及数组函数的使用,如array_push、array_pop、sort、rsort等。 **文件与目录操作** 1. **文件系统操作**:包括文件的读写、追加、复制、移动、删除...
通过实际操作,读者能更好地理解和掌握PHP的使用方法。 CHM格式的文档便于用户快速查找所需信息,其索引和搜索功能使得学习过程更加高效。对于初学者,可以按照章节顺序逐步学习;对于有一定基础的开发者,可以随时...
其手册会讲解路由、模型、控制器、视图、模板引擎、缓存、日志等核心概念和用法。 【Smarty】:Smarty是一个PHP的模板引擎,分离了业务逻辑和视图设计。手册中会涉及模板语法、变量赋值、模板继承、缓存机制等内容...
1. 堆栈操作:汇编语言中的堆栈由SP寄存器管理,PUSH和POP指令用于压栈和出栈,常用于函数调用和临时数据存储。 2. 数组和字符串:在汇编中,数组和字符串的处理需要手动管理内存,使用索引访问和字符串处理指令(如...
1. **字符串与数组操作**:介绍字符串处理函数,如substr、str_replace等,以及数组的操作,如array_push、array_pop等。 2. **文件与目录操作**:讲解如何读取、写入文件,创建和删除目录,以及文件上传和下载的...
5. **字符串与数组操作**:详细阐述字符串处理函数(如strlen、strpos、substr等)和数组操作函数(如count、array_push、array_pop等)的用法。 **PHP与数据库交互** 6. **MySQL数据库连接**:讲解如何使用PHP...
4. **字符串和数组操作**:深入学习PHP中的字符串处理函数,如substr、strpos、str_replace等,以及数组处理函数,如array_push、array_pop、array_merge等,这些在实际开发中非常常用。 5. **文件和目录操作**:...
例如,`push` 和 `pop` 指令用于栈操作,`jmp` 和 `call` 用于控制流程转移,而 `cmp` 和 `jcc`(条件跳转)则用于条件判断和分支执行。此外,手册还将涵盖如何使用段寄存器、堆栈指针和指令指针等关键概念。 对于...
手册会详细介绍字符串函数(如strlen、substr、strpos等)和数组函数(如array_push、array_pop、count等),这些函数在日常开发中非常常用。 5. 文件与目录操作: PHP提供了大量用于读写文件、创建、删除目录的...
数组方面,有`array()`创建数组,`count()`计算元素个数,`foreach`遍历数组,以及`array_push()`、`array_pop()`等操作数组元素的函数。 接着,教程会讲解PHP与数据库的交互,特别是MySQL。PHP提供了MySQLi或PDO...
5. 数组处理函数:如 `array_push`、`array_pop`、`in_array` 等,用于操作 PHP 的数组。 6. 超时处理:可以通过 `set_time_limit` 函数限制脚本的执行时间,防止长时间运行导致的问题。 7. Linux 命令执行函数:如 ...
- **数组操作**:理解索引数组、关联数组,使用array_push、array_pop、count、in_array等函数进行数组操作。 3. **文件和目录操作** - **文件I/O**:学习如何打开、读取、写入和关闭文件,以及fopen、fgets、...