CODE SEGMENT
ASSUME CS:CODE
ORG 100H
START: JMP BBB
VAL1 DW ?
VAL2 DW ?
VAL3 DW ?
LFCR DB 13,10,'$'
BBB: PUSH CS
POP DS
PUSH CS
POP ES
CALL INPUTNUM
LEA SI,ARRAY
MOV AX,[SI]
MOV VAL1,AX
MOV VAL3,AX
MOV AX,[SI+2]
MOV VAL2,AX
MOV BX,VAL2
MOV AX,VAL3
@MAIN: MOV DX,0
INC AX
PUSH AX
DIV BX
CMP DX,0
JE @MAIN1
POP AX
JMP @MAIN
@MAIN1:
LEA DX,LFCR
MOV AH,9
INT 21H
POP AX
CALL DISPAXS
MOV AH,4CH
INT 21H
;===============================================
; 键盘输入数值数组子程序(数组名为array,元素个数存放在num中)
INPUTNUM PROC NEAR
; 输入的数据以一个空格分隔,以回车符结束输入
LEA DI,ARRAY ;将数组第一个元素的有效地址置入DI
MOV WORD PTR[NUM],0
STIN:
MOV AX,0
PUSH AX
AGAIN1:
MOV AH,1
INT 21H
MOV BYTE PTR[CHAR],AL
CMP AL,13
JE LINE0
CMP AL,' '
JE LINE0
SUB AL,30H
MOV AH,0
MOV SI,AX
POP AX
MOV CL,10
MOV CH,0
MUL CX
ADD AX,SI
PUSH AX
JMP AGAIN1
LINE0:
POP AX
MOV WORD PTR[DI],AX
INC WORD PTR[NUM]
CMP BYTE PTR[CHAR],13
JE STINEND
INC DI
INC DI
JMP STIN
STINEND:
RET
ARRAY DW 100 DUP(0)
NUM DW 0
CHAR DB ?
INPUTNUM ENDP
;==================================================
; 将要显示的有符号数置于 ax 中
DISPAXS PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
PUSH BP
PUSH DS
PUSH ES
PUSHF
PUSH CS
POP DS
PUSH CS
POP ES
MOV CX,6
LEA DI,DISPAXSS
@DISPAXS:
MOV BYTE PTR [DI],32
INC DI
LOOP @DISPAXS
PUSH AX
MOV DL,32
MOV AH,2
INT 21H
POP AX
MOV BYTE PTR NZS,0
MOV BYTE PTR SIGNS,0
CMP AX,0
JGE @DISPAXS0
MOV BYTE PTR SIGNS,1
NEG AX
@DISPAXS0:
PUSH AX
LEA SI,DIVARRS
LEA DI,DISPAXSS
INC DI
MOV CX,5
@DISPAXS1:
POP AX
MOV DX,0
MOV BX,[SI]
DIV BX
PUSH DX
CMP AL,0
JNE @DISPAXS2
CMP BYTE PTR NZS,1
JE @DISPAXS2
CMP CX,1
JE @DISPAXS2
MOV DL,20H
JMP @DISPAXS3
@DISPAXS2:
ADD AL,30H
MOV DL,AL
MOV BYTE PTR NZS,1
@DISPAXS3:
MOV BYTE PTR[DI],DL
INC SI
INC SI
INC DI
LOOP @DISPAXS1
POP DX
CMP BYTE PTR SIGNS,1
JNE @DISPAXS6
LEA SI,DISPAXSS
ADD SI,5
@DISPAXS4:
CMP BYTE PTR [SI],32
JE @DISPAXS5
DEC SI
JMP @DISPAXS4
@DISPAXS5:
MOV BYTE PTR [SI],'-'
@DISPAXS6:
LEA DX,DISPAXSS
MOV AH,9
INT 21H
POPF
POP ES
POP DS
POP BP
POP DI
POP SI
POP DX
POP CX
POP BX
POP AX
RET
DIVARRS DW 10000,1000,100,10,1
NZS DB 0
SIGNS DB 0
DISPAXSS DB 32,32,32,32,32,32,'$'
DISPAXS ENDP
;==============================================
CODE ENDS
END START