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

一个程序开始的时候,下面指令什么意思
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指向栈段的顶端。
希望我的回答对您有帮助,呵呵!
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-02-27
保护数据用。就是将DS AX 里的数据先暂存在堆栈里,这就是入栈(指令为PUSH)。然后,可以对它们进行操作而不会影响原来的数据。到需要原来的数据时,再出栈(POP) 。本回答被网友采纳
第2个回答  2016-01-29
用于缓存数据,保护寄存器或者进行寄存器与寄存器间数据传输。而且有些寄存器的值只能通过堆栈操作完成。比如程序寄存器的值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
第3个回答  2015-05-25
汇编语言中堆栈的操作有专门的语句指令。
入栈指令是: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码转换为十六进制。
第4个回答  2015-05-20
以上的回答,全都是错误的。

楼主的所问的这些指令:

PUSH DS
SUB AX, AX
PUSH AX

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

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