📄 hui42.asm
字号:
.386
STACK SEGMENT USE16 STACK
DB 200 DUP(0)
STACK ENDS
DATA SEGMENT USE16
BUF DB 100
DB 0
DB 100 DUP(0)
BUF1 DW 100 DUP(0)
BUF2 DB 100 DUP(0)
BUF3 DB 10
DB 0
DB 10 DUP(0)
BUF4 DB 0AH,0DH,'Please input numbers:',0AH,0DH,'$'
BUF5 DB 0AH,0DH,'Output Format (1: decimal; 2 :hex) :$'
BUF6 DB 0AH,0DH,'Error!$'
BUF7 DB 0AH,0DH,'$'
FLAG DB 0
FLAG1 DB 0
FLAG2 DB 0
FLAG3 DB 0
COUNT DB 0
READ MACRO A
LEA DX,A
MOV AH,10
INT 21H
ENDM
WRITE MACRO B
LEA DX,B
MOV AH,9
INT 21H
ENDM
DATA ENDS
CODE SEGMENT USE16
ASSUME DS:DATA,CS:CODE,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV FLAG,0
WRITE BUF4
READ BUF
LEA BX,BUF+1
LEA BP,BUF1
CALL CHILD1
CMP FLAG,0
JNZ START
MOV CX,DI
MOV SI,DI
CALL CHILD2
AGAIN: WRITE BUF5
READ BUF3
CMP BUF3+2,'1'
JZ START1
CMP BUF3+2,'2'
JZ START2
JMP AGAIN
START1: CALL CHILD4
JMP EXIT
START2: CALL CHILD3
JMP EXIT
CHILD1 PROC NEAR
MOV AX,0
MOV AL,[BX]
CMP AX,0
JNZ CHILD19
MOV FLAG,1
JMP EXIT1
CHILD19: INC BX
MOV DX,0
MOV DI,0
LOP1: CMP AX,0
JNZ CHILD18
MOV FLAG3,1
JMP CHILD17
CHILD18: CMP [BX],BYTE PTR 20H
JNZ CHILD11
INC BX
DEC AX
CMP FLAG2,0
JNZ CHILD17
JMP LOP1
CHILD11: CMP [BX],BYTE PTR '+'
JNZ CHILD12
INC BX
DEC AX
JMP CHILD13
CHILD12: CMP [BX],BYTE PTR '-'
JNZ CHILD13
INC BX
DEC AX
MOV FLAG1,1
CHILD13: CMP [BX],BYTE PTR 30H
JL CHILD14
CMP [BX],BYTE PTR 39H
JG CHILD14
JMP CHILD15
CHILD14: WRITE BUF6
MOV FLAG,1
JMP EXIT1
CHILD15: MOVSX CX,[BX]
INC BX
DEC AX
SUB CX,30H
CMP FLAG1,0
JZ CHILD16
NEG CX
CHILD16: IMUL DX,10
JO CHILD14
ADD DX,CX
JO CHILD14
MOV FLAG2,1
JMP LOP1
CHILD17: MOV DS:[BP],DX
ADD BP,2
INC DI
MOV DX,0
MOV FLAG1,0
MOV FLAG2,0
CMP FLAG3,0
JNZ EXIT1
JMP LOP1
EXIT1: RET
CHILD1 ENDP
CHILD2 PROC NEAR
PUSH SI
DEC DI
LOP2: CMP DI,0
JZ EXIT2
MOV DX,0
LEA SI,BUF1
CHILD21: CMP DX,DI
JL CHILD22
DEC DI
JMP LOP2
CHILD22: MOV AX,[SI]
MOV BX,[SI+2]
CMP AX,BX
JG CHILD23
MOV [SI],BX
MOV [SI+2],AX
CHILD23: ADD SI,2
INC DX
JMP CHILD21
EXIT2: POP SI
RET
CHILD2 ENDP
CHILD3 PROC NEAR
LEA SI,BUF1
LEA DI,BUF2
A2: MOV FLAG,0
MOV BX, [SI]
MOV BP, [SI]
CMP BX,0
JL A4
JNZ A3
MOV BYTE PTR [DI],'0'
INC DI
JMP PRINT
A3: SHR BH,4
CMP BH,9
JG A5
CMP BH,0
JZ SEC
OR BH,30H
MOV [DI],BH
MOV FLAG,1
INC DI
JMP SEC
A4: MOV BYTE PTR [DI],'-'
INC DI
NEG BX
MOV BP,BX
JMP A3
A5: MOV BYTE PTR [DI],'0'
INC DI
ADD BH,37H
MOV [DI],BH
MOV FLAG,1
INC DI
SEC: MOV BX,BP
AND BH,0FH
CMP BH,9
JG A6
CMP BH,0
JNZ SEC1
CMP FLAG,0
JZ THI
SEC1: OR BH,30H
MOV [DI],BH
MOV FLAG,1
INC DI
JMP THI
A6: CMP FLAG,0
JNZ A61
MOV BYTE PTR [DI],'0'
INC DI
A61: ADD BH,37H
MOV [DI],BH
MOV FLAG,1
INC DI
THI: MOV BX,BP
SHR BL,4
CMP BL,9
JG A7
CMP BL,0
JNZ THI1
CMP FLAG,0
JZ FOU
THI1: OR BL,30H
MOV [DI],BL
MOV FLAG,1
INC DI
JMP FOU
A7: CMP FLAG,0
JNZ A71
MOV BYTE PTR [DI],'0'
INC DI
A71: ADD BL,37H
MOV [DI],BL
MOV FLAG,1
INC DI
FOU: MOV BX,BP
AND BL,0FH
CMP BL,9
JG A8
OR BL,30H
MOV [DI],BL
INC DI
JMP NEXT
A8: CMP FLAG,0
JNZ A81
MOV BYTE PTR [DI],'0'
INC DI
A81: ADD BL,37H
MOV [DI],BL
INC DI
NEXT: MOV BYTE PTR [DI],'H'
INC DI
PRINT: MOV BYTE PTR [DI],20H
INC DI
ADD SI,2
DEC CX
JNZ A2
MOV BYTE PTR [DI],'$'
WRITE BUF7
WRITE BUF2
RET
CHILD3 ENDP
CHILD4 PROC NEAR
MOV BX,0
MOV CX,WORD PTR 10
MOV COUNT,0
LEA BP,BUF1
LOP4: MOV DX,0
MOV AX,DS:[BP]
CMP AX,0
JG CHILD42
JNZ CHILD41
MOV DX,WORD PTR 0
PUSH DX
MOV COUNT,1
JMP CHILD43
CHILD41: NEG AX
MOV BUF2[BX],'-'
INC BX
CHILD42: MOV DX,0
DIV CX
PUSH DX
INC COUNT
CMP AX,0
JNZ CHILD42
CHILD43: POP AX
ADD AL,30H
MOV BUF2[BX],AL
INC BX
DEC COUNT
CMP COUNT,0
JNZ CHILD43
MOV BUF2[BX],BYTE PTR 20H
INC BX
ADD BP,2
DEC SI
CMP SI,0
JNZ LOP4
MOV BUF2[BX],BYTE PTR '$'
WRITE BUF7
WRITE BUF2
RET
CHILD4 ENDP
EXIT: MOV AH,4CH
INT 21H
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -