注册 登录
编程论坛 汇编论坛

[求助] 堆栈段

xxygdufs 发布于 2006-05-15 21:32, 628 次点击

DATA SEGMENT
BCDBUF DB 12H,24H,96H,87H,71H,79H,56H,34H,63H,45H
COUNT EQU $-BCDBUF
ABCBUF DB 20 DUP(?)
DATA ENDS
STACK SEGMENT PARA STACK 'STACK'
STAPN DB 100 DUP(?)
TOP EQU LENGTH STAPN
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV AX,STACK
MOV SS,AX
MOV AX,TOP
MOV SP,AX
MOV SI,OFFSET BCDBUF
MOV DI,OFFSET ABCBUF
MOV CX,COUNT
CLD

LP: LODSB ;SI->AL
MOV BL,AL
AND AL,0FH
OR AL,30H
STOSB ;AL->DI
MOV DL,AL
CALL DISP
MOV AL,BL
PUSH CX
MOV CL,4
SHR AL,CL
OR AL,30H
MOV DL,AL
STOSB
CALL DISP
POP CX
LOOP LP
MOV AH,4CH
INT 21H

DISP PROC NEAR
MOV AH,02H
INT 21H
MOV DL,' '
MOV AH,02H
INT 21H
RET
DISP ENDP
CODE ENDS
END START
请问各位大侠,上面程序的堆栈段有什么作用。

3 回复
#2
公子吕2006-05-16 12:01

你问的是堆栈段(SS)还是堆栈(STACK)?
TOP EQU LENGTH STAPN
MOV AX,TOP
MOV SP,AX
为什么把堆栈的长度送给sp?

看没有注释的汇编代码真痛苦.

#3
xxygdufs2006-05-16 12:39
我是问上面的堆栈段有什么作用,为什么要有这个段?
我这处程序是原文按书抄的,
#4
公子吕2006-05-16 13:08
call的时候,程序要保护断点(压入堆栈),传递参数,保存寄存器.这些都要用到堆栈

不过不定义堆栈也没出错,需要debug一下才知道.
1