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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于汇编语言问题,入栈出栈啥用相关的知识,希望对你有一定的参考价值。

一个程序开始的时候,下面指令什么意思
PUSH DS
SUB AX, AX
PUSH AX
MOV AX, DAT
MOV DS, AX

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指向栈段的顶端。
希望我的回答对您有帮助,呵呵!
参考技术A 保护数据用。就是将DS AX 里的数据先暂存在堆栈里,这就是入栈(指令为PUSH)。然后,可以对它们进行操作而不会影响原来的数据。到需要原来的数据时,再出栈(POP) 。 参考技术B 用于缓存数据,保护寄存器或者进行寄存器与寄存器间数据传输。而且有些寄存器的值只能通过堆栈操作完成。比如程序寄存器的值CS只能通过堆栈操作完成读取:
push cs
pop bx; 或者 pop ds之类。
也用于子函数(子例程,通过Call指令调用)的参数传递。
CALL _SUB
_SUB: PUSH AX ; 保存AX
PUSH BX ; 保存BX
mov AX, 128; 因为下面会改写这两个寄存器
mov BX, 125;
.... ; 进行相关功能操作
POP BX ; 完成后恢复BX值
POP AX ; 完成后恢复AX值
RET
参考技术C 汇编语言中堆栈的操作有专门的语句指令。
入栈指令是:PUSH
出栈指令是:POP
比如:

MOV A,30H ;将一个压缩BCD码送累加器A
PUSH 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码转换为十六进制。
参考技术D 以上的回答,全都是错误的。

楼主的所问的这些指令:

PUSH DS
SUB AX, AX
PUSH AX

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

这几句,是和 DOS 操作系统配合使用的。
这几句,是为了正确结束应用程序,而编写的。

以上是关于关于汇编语言问题,入栈出栈啥用的主要内容,如果未能解决你的问题,请参考以下文章

华为OD机试独家提供C语言题解 - 入栈出栈

通俗讲解入栈出栈(C语言)

C语言数据结构链栈(创建入栈出栈取栈顶元素遍历链栈中的元素)

JAVA 方法的入栈出栈问题

如何理解“入栈、读栈、出栈”

Python模拟入栈出栈操作