perhaps a little more code like this one (old so old ...)
;Piece of code
DATA SEGMENT WORD PUBLIC 'DATA'
PILE DW 0
PDOSPASS STRUC
DAX DW ?
PDOSPASS ENDS
DATA ENDS
DGROUP GROUP DATA
CODE SEGMENT BYTE PUBLIC 'CODE'
ASSUME CS:CODE,DS:DGROUP,ES:DGROUP,SS:DGROUP
PUBLIC DOSPASS
DOSPASS PROC FAR
MOV PILE,SP
MOV AX,SP
PUSH BP
SUB AX,SP ;see here if it is negative (FF..h) or positive (2h) ?
MOV BP,SP ;debugger can be usefull!
PUSH AX
PUSH DS
SAHF
MOV BX,[BP+6]
;end
SAHF
POP DS
POP AX
POP BP
MOV SP,PILE
RET 2
DOSPASS ENDP
CODE ENDS
END