N?EQU$-NUM
POSITIVE?DB0
NEGATIVE?DB0
ZERO?DB0
SUM?DW0DATA?ENDS
STACK1?SEGMENTSTACK DB100?DUP(?) STACK1?ENDSCODE?SEGMENT
ASSUMECS:CODE,DS:DATA,SS:STACK1START?PROC?FAR
PUSH?DS MOVAX,?0;標準序 PUSH?AX MOVAX,?DATA MOVDS,?AX MOVSI,OFFSET?NUM MOVCX,N CLD MOVBX,0@M0:
LODSB CBW ADDBX,AX CMPAL,0 JG@M1 JL@M2 INCZERO JMP@MM@M1:
INCPOSITIVE JMP@MM@M2:
INCNEGATIVE@MM:
LOOP?@M0 MOVSUM,BX MOVAX,BX CALL?DSPAXS MOVAL,POSITIVE MOVAH,0 CALL?DSPAXS MOVAL,NEGATIVE MOVAH,0 CALL?DSPAXS MOVAL,ZERO MOVAH,0 CALL?DSPAXS RETSTART?ENDP
;============================
DSPAXS?PROC?NEAR PUSH?AX TEST?AX,8000H JNS@DSPAXS1 PUSH?AX PUSH?DX MOVAH,2 MOVDL,'-' INT21H POPDX POPAX NEGAX@DSPAXS1:
CALL?DSPAX POPAX RET DSPAXS?ENDP;============================
DSPAX?PROC?NEAR
PUSH?AX PUSH?BX PUSH?CX PUSH?DX PUSHF XORCX,CX MOVBX,10@DSPAX1:
XORDX,DX DIVBX INCCX ORDX,30H PUSH?DX CMPAX,0 JNE@DSPAX1 MOVAH,2@DISPAX2:
POPDX INT21H LOOP?@DISPAX2 MOVDL,32 INT21H POPF POPDX POPCX POPBX POPAX RETDSPAX?ENDP
;============================
CODE?ENDS
ENDSTART