汇编 如何使用多个堆栈 30
3个回答
展开全部
堆栈也只是一种特殊的存储结构,如果你愿意,你可以任意定义一片内存地址为你的堆栈,只要你遵循FILO就可以了啊。
何必非要用堆栈呢?你将你想入栈的存放在内存中就好了。
发明堆栈的人,是想让人们编程更加简单,而不是更加复杂。
何必非要用堆栈呢?你将你想入栈的存放在内存中就好了。
发明堆栈的人,是想让人们编程更加简单,而不是更加复杂。
追问
说是这样说,这只是为了更加了解汇编吧,PS:具体的话该怎么实现呢?16位堆栈。
追答
ss sp
直接更改SS 和SP 就好了。记得保存SS SP。
ASSUME CS:CODE, DS:DATA, SS:STACK
DATA SEGMENT
DW 1,2,3,4,5,6,7,8
DATA ENDS
STACK SEGMENT
DW 0,0,0,0,0,0,0,0
STACK ENDS
STACK1 SEGMENT
DW 0,0,0,0,0,0,0,0
STACK1 ENDS
CODE SEGMENT
START: MOV AX,DATA ;这里将自定义的数据段 DATA 与 DS 联系起来
MOV DS,AX
MOV AX,STACK ;这里将自定义的堆栈段 STACK 与 SS 联系起来
MOV SS,AX
MOV SP,1000H
MOV CX,9999H
PUSH CX
MOV AX,8888H
PUSH AX
MOV BX,7777H
PUSH BX
MOV AX,STACK1 ;这里将自定义的堆栈段 STACK1 与 SS 联系起来
MOV SS,AX
PUSH SP
MOV SP,1000H
MOV BX,1111H
PUSH BX
MOV AX,2222H
PUSH AX
MOV CX,3333H
PUSH CX
; MOV AX,STACK ;这里将自定义的堆栈段 STACK 与 SS 联系起来
; MOV SS,AX
; POP CX
; POP AX
; POP BX
; MOV AX,STACK1 ;这里将自定义的堆栈段 STACK1 与 SS 联系起来
; MOV SS,AX
; POP BX
; POP AX
; POP CX
MOV AX,004CH
INT 21H
CODE ENDS
END START
可以直接用但是,SP 的保存是一件比较纠结的事情,你存了不好取。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
win32汇编的话,
esp和ebp改了就行了。
只要你之后知道怎么改回来……
16位汇编因为那个分段寻址的缘故,我对分段寻址实在是不熟,只改sp和bp的话估计不行,ss也要跟着改,怎么改我就不知道了
esp和ebp改了就行了。
只要你之后知道怎么改回来……
16位汇编因为那个分段寻址的缘故,我对分段寻址实在是不熟,只改sp和bp的话估计不行,ss也要跟着改,怎么改我就不知道了
追问
考的就是16位的π_π
追答
16位汇编我不会……
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
16位的汇编,自己搞堆栈的话要自己分配一段内存,再弄几字节空间存下SS SP的数据,PUSH POP操作前恢复,操作后备份SP SS俩寄存器。
别忘了给系统的堆栈SP SS也这样弄。
别忘了给系统的堆栈SP SS也这样弄。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询