汇编语言中什么是压栈出栈,汇编语言中的栈,压栈,出栈是什么意思

2020-11-24 21:03:43 字数 5934 阅读 9259

1楼:匿名用户

栈是一种线性数据结构,它遵循后进先出的顺序。有一个指针总指向栈顶。打个比方:

一个栈就相当于一个桶,入栈就是向里面装东西,先装的在下面后装的在上面,装一个指针就会加1,指向新装的东西,出栈就相当于取出东西,只有先取上面的,再取下面的,当取一个后指针就会减一,即指针始终指向桶里最上面那个东西。

2楼:匿名用户

可以理解成机枪的弹夹,弹夹就是一个栈,子弹一颗一颗压进去,就是压栈,有个顺序特点就是先进后出,后进先出,出栈就是子弹装号了一颗一颗打出来,栈的清理就是把弹夹清空,清掉弹夹里的子弹。堆栈就是把子弹放到弹夹里,堆在那里了,实际意思都差不多。

c语言里栈就可以用数组来做,把数据像子弹一样压数组里就是了。

3楼:匿名用户

压栈就是一个指令,遵循先进先出,后进后出原理,为了在产生中断时候,可以保存数据用的。

汇编语言中的栈,压栈,出栈是什么意思

4楼:匿名用户

就像一个装乒乓球的盒子,只有一个口能打开

里面一个球不放,就是空栈

往里面放一个球,就是压栈

从里边拿一个球,就是出栈

都放满了,就是满栈,再放就会溢出

5楼:匿名用户

栈就是分配的一些连续的内存空间 注意是连续的压栈就是把一个数据放到栈中的顶部,然后依次往上叠,就和叠一堆书一样出栈就是把栈顶部的数据拿出来,就像是把一叠书的最上面的一本拿出来一样

6楼:匿名用户

说的通俗点,就是一个数据的存储与读取。栈是个存储器,压栈就是往里面存数据,出栈就是取数据

关于汇编语言问题,入栈出栈什么用

7楼:匿名用户

汇编语言中堆栈的操作有专门的语句指令。

入栈指令是:push

出栈指令是:pop

比如:mov a,30h ;将一个压缩bcd码送累加器apush acc ;压栈保护

anl a,#0fh ;保留低四位

mov 30h,a ;回送给30h

pop acc ;出栈

swap a ;高低四位互换

anl a,#0fh ;保留低四位

mov b,#10 ;b送10

mul ab ;乘10

add a,30h ;与个位相加

mov 30h,a ;回送给30h

以上程序段将一个压缩bcd码转换为十六进制。

8楼:匿名用户

保护数据用。就是将ds ax 里的数据先暂存在堆栈里,这就是入栈(指令为push)。然后,可以对它们进行操作而不会影响原来的数据。到需要原来的数据时,再出栈(pop) 。

9楼:匿名用户

对于现代的计算机来说,栈是一种非常关键、极其重要的数据结构。

栈就相当于一个细长的装弹珠的瓶子(瓶口、瓶身内部截面均只能通过一个弹珠),不同颜色的弹珠只能从瓶口装入,也只能从瓶口取出,在瓶内的弹珠的顺序是不能改变的。这些弹珠具有“先进后出、后进先出”的特性。瓶子有一定的长度,装满弹珠后就不能再装了,再装就直接滚跑了(溢出)。

程序不都是线性的,有分支、有循环,有主程序、也有子程序。在子程序中,栈通常用来保存现场(进栈--push、pusha、pushf),在栈中定义局部变量,执行完成后要恢复现场(出栈--popf、popa、pop)。没有栈这种数据结构,很难想象现在的软件是个什么样子。

例:用汇编语言(ma**)编写程序段,实现从键盘输入十个一位10进制数后累加以非压缩bcd码形式存放在ah和al中。

code segment

assume cs:code

*** 100h

start:

jmp bbb

lfcr db 13,10,'$'

bbb:

push cs

pop ds

call inputnum

mov ah,9

lea dx,lfcr

int 21h

lea si,array

mov ch,0

mov cl,byte ptr[num]

mov ax,0

lp:add ax,word ptr[si]

daa ; 十进制加法调整指令

inc si

inc si

loop lp

call dispnum

mov ah,4ch

int 21h

dispnum proc near

; 将要显示的数据放入al中

mov dl,al ; 将al暂存在dl中

and al,0fh ; 取al的低4位

mov bl,al ; 非压缩的bcd码

add bl,30h ; 转成ascii码

mov al,dl ; 取回al 并经以下4次右移取出al的高4位

shr al,1

shr al,1

shr al,1

shr al,1

mov bh,al ; 非压缩的bcd码

add bh,30h ; 转成ascii码

mov ax,bx ; 非压缩的两位数的ascii码存放在ax中

mov byte ptr[y+4],al

mov byte ptr[y+3],ah

mov ah,9

lea dx,y

int 21h

rety db 10,13,0,0,0,'$'

dispnum endp

inputnum proc near

; 输入的数据以一个空格分隔,以回车符结束输入

lea di,array ;将数组第一个元素的有效地址置入di

mov byte ptr[num],0

stin:

mov ax,0

push ax

again1:

mov ah,1

int 21h

mov byte ptr[char],al

cmp al,13

je line0

cmp al,' '

je line0

sub al,30h

mov ah,0

mov si,ax

pop ax

mov cl,10

mov ch,0

mul cx

add ax,si

push ax

jmp again1

line0:

pop ax

mov word ptr[di],ax

inc byte ptr[num]

cmp byte ptr[char],13

je stinend

inc di

inc di

jmp stin

stinend:

retarray dw 100 dup(0)

num db 0

char db ?

inputnum endp

code ends

end start

请注意inputnum子程序,在开始部分执行了 push ax,就是为了保存寄存器ax的值,因为在int 21h中断子程序中要用ax进行入口参数设置。

10楼:匿名用户

用于缓存数据,保护寄存器或者进行寄存器与寄存器间数据传输。而且有些寄存器的值只能通过堆栈操作完成。比如程序寄存器的值cs只能通过堆栈操作完成读取:

push cs

pop bx; 或者 pop ds之类。

也用于子函数(子例程,通过call指令调用)的参数传递。

call _sub

_sub: push ax ; 保存axpush bx ; 保存bx

mov ax, 128; 因为下面会改写这两个寄存器mov bx, 125;

.... ; 进行相关功能操作pop bx ; 完成后恢复bx值pop ax ; 完成后恢复ax值ret

11楼:娃哈哈ab钙奶

push ds ;把ds压入栈中

sub ax, ax ;ax—ax 结果存放在ax中,就是把0放在ax中

push ax ;把ax压入栈中

mov ax, dat ;把dat段地址放到ax中mov ds, ax ;把ax值放到ds中pop入栈是把数据压入栈段中;push出栈是把数据从栈段中拿出来;入栈与出栈是遵循先进后出的原则!入栈出栈其实是个临时存储数据作用!ss指向栈段的段地址,sp指向栈段的顶端。

希望我的回答对您有帮助,呵呵!

12楼:做而论道

以上的回答,全都是错误的。

楼主的所问的这些指令:

push ds

sub ax, ax

push ax

具有特定的含义,是不能简单的解释为:保护数据。

这几句,是和 dos 操作系统配合使用的。

这几句,是为了正确结束应用程序,而编写的。

压栈 和 出栈 是什么意思啊`?

13楼:匿名用户

可以理解成机枪的弹夹,弹夹就是一个栈,子弹一颗一颗压进去,就是压栈,有个顺序特点就是先进后出,后进先出,出栈就是子弹装号了一颗一颗打出来,栈的清理就是把弹夹清空,清掉弹夹里的子弹。堆栈就是把子弹放到弹夹里,堆在那里了,实际意思都差不多。

c语言里栈就可以用数组来做,把数据像子弹一样压数组里就是了。

14楼:匿名用户

栈是存储的系统 压栈是写入数据 出栈是输出数据 先进后出 后进先出

15楼:匿名用户

压栈即进栈,用push表示,每压栈一次减2,出栈用pop表示,没出栈一次加2,

汇编语言用指令pusha到底把、哪些压栈了呢?

16楼:清风迎明月

如果是51单片机,那么没有push a指令,可以是push acc。进栈时,看你的sp开在什么地方,先要对sp加1,再进栈。

例如:mov sp,#60h

push acc

那么,执行push acc时,先sp+1,那么sp指向61h,然后将acc的内容推入61h中!

17楼:水墨御风

是51单片机的吧,应该是将直接地址所指向的目的操作数送入sp所指向的单元吧!实现入栈操作。

18楼:匿名用户

通用寄存器的内容压入堆栈。这些寄存器按以下顺序存储到堆栈:eax、ecx、edx、ebx、ebp、esp(原始值)、ebp、esi 及 edi(如果当前操作数大小属性为 32)

汇编里的push功能是压栈但为什么要压栈的呢?

19楼:匿名用户

计算机程序用来放数据的地方有两种,一个是堆,一个是栈。栈一般用来放一些函数的临时变量,还有中断和调用函数时的返回地址。因为这些地址都是临时的,所以在栈的出栈和进栈的时候可以动态的进入和删除。

调用函数和中断的时候,临时变量和返回地址就暂存在栈中。函数调用完了,临时变量和返回地址就从栈删除了。所以栈一般来说是临时变量,调用函数会自动**内存。

这就是push 和 pop 的功能了。相当于一个暂时保存数据的地方。 而堆的话一般用来动态分配内存,分配的内存一般不会自动释放。

20楼:匿名用户

计算机在运算的时候大部分情况会把数据放到寄存器里运算,而调用函数的时候,会有新的数值要使用这些寄存器,所以要把这些寄存器里的内容保存起来,就是保护现场。因为栈的先入后出非常适合这一操作,所以每次函数调用前都有入栈操作,函数返回是出栈还原现场

汇编语言中的栈,压栈,出栈是什么意思

1楼 匿名用户 就像一个装乒乓球的盒子,只有一个口能打开 里面一个球不放,就是空栈 往里面放一个球,就是压栈 从里边拿一个球,就是出栈 都放满了,就是满栈,再放就会溢出 2楼 匿名用户 栈就是分配的一些连续的内存空间 注意是连续的压栈就是把一个数据放到栈中的顶部,然后依次往上叠,就和叠一堆书一样出栈...

在c语言里,参数的压栈和出栈分别是什么意思

1楼 匿名用户 压栈是进栈,把元素放到栈里面 出栈,把元素从栈中取出。 栈是先进后出。举个例子,一个装羽毛球的筒子,一边能开一边不能开,1号球先进去,到筒子底部 进栈 。然后2号球接着进去,在你不拿出2号球的情况下,你是无法拿走1号球。 而拿走球的操作就是出栈咯 2楼 匿名用户 压栈 就是进栈的意思...