汇编语言中堆栈段的问题

;-- 数据段定义 ----------------------------------
DATA SEGMENT
NUM1 DQ 00120030FC218B4AH ; 数1
NUM2 DQ 3E8144E96D701155H ; 数2
SUM DQ ? ; 结果单元
DATA ENDS
;-- 代码段定义 ----------------------------------
CODE SEGMENT ASSUME CS: CODE, DS: DATA
START: MOV AX, DATA MOV DS, AX
;-- 循环初始化 ----------------------------------
LEA BX, NUM1 ; BX指向数1的最低一个字
LEA SI, NUM2 ; SI指向数2的最低一个字
LEA DI, SUM ; DI指向结果单元的最低一个字
MOV CX, 4 ; 循环次数(4个字相加)
CLC ; 清进位位
AGAIN: MOV AX, WORD PTR [BX] ; 字相加
ADC AX, WORD PTR [SI]
MOV WORD PTR [DI], AX ; 存和
INC BX ; 指针调整
INC BX
INC SI
INC SI
INC DI
INC DI
LOOP AGAIN ; 循环控制
;--------------------------------------------------
MOV AH, 4CH ; 返回DOS
INT 21H
CODE ENDS
END START

上面的程序中,为啥要求TOP EQU $-ST1?
后面的
MOV SS, AX
MOV SP, TOP是啥意思?
;-- 堆栈段定义忘记贴了 ----------------------------------
ST1 SEGMENT PARA STACK ‘STACK’
DB 100 DUP(?)
TOP EQU $-ST1
ST1 ENDS

你的程序并没有定义栈段。
若定义了,则应:
mov ax,seg sdeg
mov ss,ax
mov sp,top ------因为栈结构是从高地址向低地址生长的,要把栈段的最高处的偏移赋给sp

直接写 MOV AX, [BX] 是可以的,因为通过寄存器ax可以确定是传送的“字”追问

;-- 堆栈段定义忘记贴了 ----------------------------------
ST1 SEGMENT PARA STACK ‘STACK’
DB 100 DUP(?)
TOP EQU $-ST1
ST1 ENDS

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答