📄 rjexp17.asm
字号:
CRLF MACRO
MOV AH,02H
MOV DL,0DH
INT 21H
MOV AH,02H
MOV DL,0AH
INT 21H
ENDM
DATA SEGMENT
MESS1 DB 'INPUT THE NUMBER ACCORDING TO HEXNUM!',0DH,0AH,'$'
MESS2 DB 'THE RESULT IS(HEX):$'
ERROR DB 'INPUT ERROR!',0DH,0AH,'$'
LEN DW 1
CY DW ?
BUF DW 256 DUP (0)
DATA ENDS
STACK SEGMENT
STA DW 32 DUP(?)
TOP DW ?
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV SP,TOP
MOV AH,09H
MOV DX,OFFSET MESS1
INT 21H ;显示输入提示信息
CALL GETNUM ;读取键入的N值
MOV BP,DX ;N值送BP
CMP BP,0
JZ EEE
CMP BP,1
JZ EEE ;N=0或N=1则转EEE
MOV SI,OFFSET BUF ;缓冲区首址
MOV [SI],DX ;缓冲区初始化为值N
XXX: DEC BP ;N值减1
CMP BP,0001H
JZ LLL ;若为1则转结束LLL
XOR BX,BX ;偏移指针清0
MOV WORD PTR [CY],0 ;进位单元清0
MOV CX,[LEN] ;当前结果长度送CX
TTT: MOV AX,[SI+BX]
MUL BP ;相乘
ADD AX,[CY] ;加低位进位
JNC JJJ ;结果无进位转JJJ
INC DX ;有进位高位单元加1
JJJ: MOV [SI+BX],AX ;结果送缓冲区中
MOV [CY],DX ;高位单元送进位单元
INC BX
INC BX ;一个字长度
LOOP TTT ;循环
CMP DX,0000H
JZ BBB ;最后1次的进位为0则转BBB
INC WORD PTR [LEN] ;长度加1
MOV [SI+BX],DX ;进位送缓冲区中
BBB: JMP XXX
EEE: MOV SI,OFFSET BUF
MOV WORD PTR [SI],1 ;结果为1
LLL: MOV AH,09H
MOV DX,OFFSET MESS2
INT 21H
MOV CX,[LEN]
MOV BX,CX ;长度
DEC BX
SHL BX,1 ;1个字为两个字节
CCC: MOV AX,[SI+BX]
CALL DISP
DEC BX
DEC BX ;显示结果
LOOP CCC
MOV AX,4C00H ;结束
INT 21H
DISP1 PROC NEAR
MOV BL,AL
MOV DL,AL
MOV CL,04
ROL DL,CL
AND DL,0FH
CALL DISPL
MOV DL,BL
AND DL,0FH
CALL DISPL
RET
DISP1 ENDP
DISPL PROC NEAR
ADD DL,30H
CMP DL,3AH
JB DDD
ADD DL,27H
DDD: MOV AH,02H
INT 21H
RET
DISPL ENDP
DISP PROC NEAR
PUSH BX
PUSH CX
PUSH DX
PUSH AX
MOV AL,AH
CALL DISP1
POP AX
CALL DISP1
POP DX
POP CX
POP BX
RET
DISP ENDP ;字符和数据显示子程序
GETNUM PROC NEAR
PUSH CX
XOR DX,DX
GGG: MOV AH,01H
INT 21H
CMP AL,0DH
JZ PPP
CMP AL,20H
JZ PPP
SUB AL,30H
JB KKK
CMP AL,0AH
JB GETS
CMP AL,11H
JB KKK
SUB AL,07H
CMP AL,0FH
JBE GETS
CMP AL,2AH
JB KKK
CMP AL,2FH
JA KKK
SUB AL,20H
GETS: MOV CL,04
SHL DX,CL
XOR AH,AH
ADD DX,AX
JMP GGG
KKK: MOV AH,09H
MOV DX,OFFSET ERROR
INT 21H
PPP: PUSH DX
CRLF
POP DX
POP CX
RET
GETNUM ENDP ;键盘字符读取子程序
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -