汇编语言自己定义的堆栈

自己定义了堆栈,并且之前有assume ss:XX
那么push ax操作的是你定义的XX还是系统默认的堆栈

第1个回答  2012-12-17
如果是系统默认,那你这程序有何意义?所以程序应使用你自己定义的堆栈,这也是你的目的。
回到你问题,你之前有 assume ss:XX ,但编译器并不会就此认为 XX 就是你定义的堆栈,你得有所表示,所以你在源程序中一定要有语句表明你的意图,例如:MOV AX,XX MOV SS,AX
这样,XX 就跟堆栈段 SS 联系起来了,程序也就知道你定义的堆栈在哪了。
下面给一个简单例子,将数据段data的内容逆序存放到堆栈段stack中

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

CODE SEGMENT
START: MOV AX,DATA ;这里将自定义的数据段 DATA 与 DS 联系起来
MOV DS,AX

MOV AX,STACK ;这里将自定义的堆栈段 STACK 与 SS 联系起来
MOV SS,AX
MOV SP,10H

MOV BX,0
MOV CX,8
S: PUSH [BX]
ADD BX,2
LOOP S

MOV AX,4C00H
INT 21H
CODE ENDS

END START本回答被提问者和网友采纳
相似回答