⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stack.asm

📁 在定时器中断中做LED的PWM输出 AT89C2051实现A/D转换的C51程序 单片机开发系统 指令系统 程序设计 定时与中断 系统扩展 接口技术 串行口
💻 ASM
字号:
;用户堆栈的有关算法
STACK	EQU	1FH	;堆栈所在页面。
BOTTOM	EQU	00H	;栈底单元。
N	EQU	200	;堆栈空间范围的字节数。
TOP	DATA	3EH	;栈顶指针。

	ORG	0000H
	LJMP	TEST
	
	ORG	100H
TEST:	LCALL	SETNULL	;初始化空栈
	MOV	A,#5AH
	LCALL	DPUSH	;数据5AH入栈
	MOV	A,#8DH
	LCALL	DPUSH	;数据8DH入栈
	MOV	A,#3CH
	LCALL	DPUSH	;数据3CH入栈
	LCALL	DPOP	;数据3CH出栈
	LCALL	DPOP	;数据8DH出栈
	LCALL	DPOP	;数据5AH出栈
STOP:	LJMP	STOP	;用户堆栈已空

SETNULL:MOV	A,#BOTTOM;初始化空栈,取栈底单元位置。
	MOV	TOP,A	;使栈顶指针指向栈底。
	RET		;设置好空栈。

DPUSH:	MOV	B,A	;保护待入栈数据。
	MOV	A,TOP	;数据入栈,先取栈顶指针的当前值。
	INC	A	;后移一个单元。
	CJNE	A,#N,PUSH1;满栈否?
	SETB	C	;满栈,入栈失败。
	SJMP	PUSHE	;结束。
PUSH1:	MOV	TOP,A	;新栈顶有效。
	MOV	DPH,#STACK;取堆栈所在页面。
	MOV	DPL,TOP	;取栈顶单元位置。
	MOV	A,B	;取待入栈数据。
	MOVX	@DPTR,A	;压入栈顶。
	CLR	C	;入栈成功。
PUSHE:	RET		;结束。

DPOP:	MOV	A,TOP	;数据出栈,先取栈顶指针的当前值。
	CJNE	A,#BOTTOM,POP1;空栈否?
	SETB	C	;空栈,出栈失败。
	SJMP	POPE	;结束。
POP1:	MOV	DPH,#STACK;取堆栈所在页面。
	MOV	DPL,TOP	;取栈顶单元。
	MOVX	A,@DPTR	;取出栈顶元素。
	DEC	TOP	;指向新的栈顶。
	CLR	C	;出栈成功。
POPE:	RET		;结束。
	END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -