📄 order.asm
字号:
STACK1 SEGMENT PARA STACK
DW 32 DUP(0)
STACK1 ENDS
DATA SEGMENT
IBUF DB 255,0,255 DUP(0)
PLUS DW 255 DUP(0)
MINUS DW 255 DUP(0)
PLUSC DB 0
MINUSC DB 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
BEGIN PROC FAR
PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET IBUF
MOV AH,10
INT 21H
MOV AH,2
MOV DL,0AH
INT 21H
MOV PLUSC,0
MOV MINUSC,0
MOV SI,OFFSET PLUS
MOV DI,OFFSET MINUS
MOV BX,2
AGAIN: CMP IBUF[BX],'-'
JE GMINUS
INC PLUSC
CALL DACB
MOV [SI],DX
ADD SI,2
JMP PMCOM
GMINUS: INC BX
INC MINUSC
CALL DACB
MOV [DI],DX
ADD DI,2
PMCOM: INC BX
CMP IBUF[BX-1],0DH
JNE AGAIN
MOV SI,OFFSET PLUS
MOV DL,PLUSC
MOV AH,0
DEC DX
OUTSID: MOV CX,DX
PUSH SI
MOV AX,[SI]
INSIDE: ADD SI,2
CMP AX,[SI]
JC NEXCHG
XCHG [SI],AX
NEXCHG: LOOP INSIDE
POP SI
MOV [SI],AX
ADD SI,2
DEC DX
JNZ OUTSID
MOV SI,OFFSET MINUS
MOV DL,MINUSC
MOV DH,0
DEC DX
OUTSDE: MOV CX,DX
PUSH SI
MOV AX,[SI]
INSDE: ADD SI,2
CMP AX,[SI]
JNC NEXCH
XCHG [SI],AX
NEXCH: LOOP INSDE
POP SI
MOV [SI],AX
ADD SI,2
DEC DX
JNZ OUTSDE
OUTPUT: DEC BX
MOV IBUF[BX],'$'
MOV CL,PLUSC
MOV CH,0
MOV DI,CX
XCHG CH,CL
SHL DI,1
PAG: SUB DI,2
AND CH,CH
JZ PDONE
MOV DX,PLUS[DI]
CALL BCDA
DEC BX
MOV IBUF[BX],','
DEC CH
JMP PAG
PDONE: MOV CL,MINUSC
MOV DI,CX
MOV CH,CL
SHL DI,1
MAG: SUB DI,2
AND CH,CH
JZ MDONE
MOV DX,MINUS[DI]
CALL BCDA
DEC BX
MOV IBUF[BX],'-'
DEC BX
MOV IBUF[BX],','
DEC CH
JMP MAG
MDONE: MOV DX,OFFSET IBUF+2
MOV AH,9
INT 21H
RET
BEGIN ENDP
DACB PROC
XOR DX,DX
MOV CL,4
DACB1: SHL DX,CL
MOV CH,IBUF[BX]
AND CH,0FH
OR DL,CH
INC BX
CMP IBUF[BX],0DH
JE DONE
CMP IBUF[BX],','
JNE DACB1
DONE: RET
DACB ENDP
BCDA PROC
MOV CL,4
BCDA1: MOV AL,DL
AND AL,0FH
ADD AL,30H
DEC BX
MOV IBUF[BX],AL
SHR DX,CL
AND DX,DX
JNE BCDA1
RET
BCDA ENDP
CODE ENDS
END BEGIN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -