DATA SEGMENT
db 'input beichengshu H:','$'
db 0DH,0AH,'$'
db 'input beichengshu L:','$'
db 0DH,0AH,'$'
db 'input chengshu H:','$'
db 0DH,0AH,'$'
db 'input chengshu L:','$'
db 'the result is :','$'
db 0DH,0AH,'$'
dw 16 dup(?)
dw 16 dup(?)
dw 16 dup(?)
dw 16 dup(?)
s1
k1
s2
k2
s3
k3
s4
s5
k4
b2
b1
c2
c1
result dw 30 dup(?)
zz
db 10 dup(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AH,09H
MOV DX,OFFSET s1
INT 21H
MOV DX,OFFSET zz
MOV BX,DX
MOV [BX],BYTE PTR 9
MOV AH,0AH
INT 21H
MOV AH,[BX+2]
MOV AL,[BX+3]
MOV CL,4
SHL AL,CL
SHR AX,CL
MOV DH,AL
MOV AH,[BX+4]
MOV AL,[BX+5]
MOV CL,4
SHL AL,CL
SHR AX,CL
MOV DL,AL
MOV b2,DX
MOV AH,09H
MOV DX,OFFSET k1
INT 21H
MOV AH,09H
MOV DX,OFFSET s2
INT 21H
MOV DX,OFFSET zz
MOV BX,DX
MOV [BX],BYTE PTR 9
MOV AH,0AH
INT 21H
MOV AH,[BX+2]
MOV AL,[BX+3]
MOV CL,4
SHL AL,CL
SHR AX,CL
MOV DH,AL
MOV AH,[BX+4]
MOV AL,[BX+5]
MOV CL,4
SHL AL,CL
SHR AX,CL
MOV DL,AL
MOV b1,DX
MOV AH,09H
MOV DX,OFFSET k2
INT 21H
MOV AH,09H
MOV DX,OFFSET s3
INT 21H
MOV DX,OFFSET zz
MOV BX,DX
MOV [BX],BYTE PTR 9
MOV AH,0AH
INT 21H
MOV AH,[BX+2]
MOV AL,[BX+3]
MOV CL,4
SHL AL,CL
SHR AX,CL
MOV DH,AL
MOV AH,[BX+4]
MOV AL,[BX+5]
MOV CL,4
SHL AL,CL
SHR AX,CL
MOV DL,AL
MOV c2,DX
MOV AH,09H
MOV DX,OFFSET k3
INT 21H
MOV AH,09H
MOV DX,OFFSET s4
INT 21H
MOV DX,OFFSET zz
MOV BX,DX
MOV [BX],BYTE PTR 9
MOV AH,0AH
INT 21H
MOV AH,[BX+2]
MOV AL,[BX+3]
MOV CL,4
SHL AL,CL
SHR AX,CL
MOV DH,AL
MOV AH,[BX+4]
MOV AL,[BX+5]
MOV CL,4
SHL AL,CL
SHR AX,CL
MOV DL,AL
MOV c1,DX
MOV AH,09H
MOV DX,OFFSET k4
INT 21H
MOV AX,b1
MOV DX,c1
MUL DX
MOV [result],AX
MOV [result+2],DX
MOV AX,b2
MOV DX,c1
MUL DX
ADD [result+2],AX
ADC [result+4],DX
MOV AX,b1
MOV DX,c2
MUL DX
ADD [result+2],AX
ADC [result+4],DX
ADC [result+6],0
MOV AX,b2
MOV DX,c2
MUL DX
ADD [result+4],AX
ADC [result+6],DX
MOV AL,BYTE PTR result+7
call JD
MOV AL,BYTE PTR result+6
call JD
MOV AL,BYTE PTR result+5
call JD
MOV AL,BYTE PTR result+4
call JD
MOV AL,BYTE PTR result+3
call JD
MOV AL,BYTE PTR result+2
call JD
MOV AL,BYTE PTR result+1
call JD
MOV AL,BYTE PTR result
call JD
MOV AH,4CH
INT 21H
JD PROC
PUSH CX
PUSH DX
PUSH AX
MOV CL,4
SHR AL,CL
OR AL,30H
CMP AL,3AH
JB br1
ADD AL,7
br1: MOV DL,AL
MOV AH,02H
INT 21H
POP AX
AND AL,0FH
OR AL,30H
CMP AL,3AH
JB br2
ADD AL,7
br2: MOV DL,AL
MOV AH,02H
INT 21H
POP DX
POP CX
RET
JD ENDP
CODE ENDS
END START
递归调用
DATA SEGMENT
STR1 DB 0AH,0DH,'PLEASE INPUT THE NUMBER(0-9):','$'
STR2 DB 0AH,0DH,'result','$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET STR1
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
AND AL,0FH
MOV AH,0
MOV CX,AX
MOV DX,OFFSET STR2
MOV AH,09H
INT 21H
MOV AX,1
MOV BX,0
MOV DX,0
LOOP1: INC BX
MUL BX
LOOP LOOP1
PUSH AX
MOV AL,AH
CALL DISPRG
POP AX
CALL DISPRG
MOV AH,04H
INT 21H
DISPRG PROC
PUSH CX
PUSH DX
PUSH AX
AND AL,0F0H
MOV CL,4
SHR AL,CL
ADD AL,30H
CMP AL,3AH
JB
ADD AL,07
B1
B1: MOV DL,AL
MOV AH,02H
INT 21H
POP AX
AND AL,0FH
ADD AL,30H
CMP AL,3AH
JB
B2
ADD AL,07
B2: MOV DL,AL
MOV AH,02H
INT 21H
POP DX
POP CX
RET
DISPRG ENDP
CODE ENDS
END START