DATA SEGMENT
NA DW ?
NB DW ?
OUTPUT1 DB 0AH,0DH,'ERROR!$'
OUTPUT2 DB 'Please input number A(0~127):$'
OUTPUT3 DB 0AH,0DH,'Please input the exponent of A(0~127):$'
;OUTPUT4 DB,0AH,0DH,'The result is:$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET OUTPUT2
CALL TS
CALL SR
MOV NA,BX
MOV DX,OFFSET OUTPUT3
CALL TS
CALL SR
MOV NB,BX
; MOV DX,OFFSET OUTPUT4
; CALL TS
CALL DG
MOV BX,NA
MOV CX,1000
CALL XS
MOV CX,100
CALL XS
MOV CX,10
CALL XS
MOV CX,1
CALL XS
MOV AH,4CH
INT 21H
;-------------------------------------------------------------------------------------------------------
TS PROC NEAR
MOV AH,09
INT 21H
RET
TS ENDP
;---------------------------------------------------------------------------------------------------------
SR PROC NEAR
XOR BX,BX
MOV CL,3
A: MOV AH,08H
INT 21H
CMP AL,30H
JB L
CMP AL,39H
JA L
MOV DL,AL
MOV AH,02H
INT 21H
SUB AL,30H
XOR AH,AH
XCHG BX,AX
MOV DH,10
MUL DH
ADD BX,AX
L: CMP AL,0DH
LOOPNZ A
RET
SR ENDP
;-----------------------------------------------------------------------------------------------------
DG PROC NEAR
CMP NB,1
JA NEXT
MOV DX,NA
RET
NEXT: MOV AX,NB
SUB AX,1
MOV NB,AX
MOV AX,NA
MUL AX
MOV NA,AX
CALL DG
RET
DG ENDP
;------------------------------------------------------------------------------------------------------
XS PROC NEAR
MOV AX,BX
MOV DX,0
DIV CX
MOV BX,DX
MOV DL,AL
ADD DL,30H
MOV AH,2H
INT 21H
RET
XS ENDP
;--------------------------------------------------------------------------------------------------------
CODE ENDS
END START