📄 cac.asm
字号:
;EXTRN MUSIC:FAR
STACK SEGMENT STACK
DB 50H DUP(?)
STACK ENDS
DATA SEGMENT
X DW ?
Y DW ?
M DW ?
N DB ?
MESS1 DB '<Q=QUIT>',0AH,0DH,'$'
MESS2 DB 'SELECT',' ','0-10',';','1-16',0AH,0DH,'$'
MESS3 DB 'PLEASE INPUT DEC-DATA',0AH,0DH,'$'
MESS4 DB 'PLEASE INPUT HEX-DATA',0AH,0DH,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:
MOV AX,DATA
MOV DS,AX
CALL CUR ;程序初始化(清屏,*窗口)
;CALL MUSIC
POS_CURSE:
MOV AH,02H
MOV DH,09
MOV DL,44
MOV BH,0
INT 10H ;光标定位(9,44)
MOV DX,OFFSET MESS1
MOV AH,09
INT 21H ;显示提示信息
MOV AH,02H
MOV DH,10
MOV DL,44
MOV BH,0
INT 10H ;光标定位(10,44)
MOV DX,OFFSET MESS2
MOV AH,09
INT 21H ;显示提示信息
MOV AH,02H
MOV DH,8
MOV DL,30
MOV BH,0
INT 10H ;光标定位(8,30)
MOV AH,07
INT 21H
SUB AL,30H
MOV N,AL
CMP N,0
JZ NEXT1
CMP N,1
JZ NEXT11
JMP PANDUAN
NEXT1:
MOV M,1
MOV AH,02H
MOV DH,11
MOV DL,44
MOV BH,0
INT 10H ;光标定位(11,44)
MOV DX,OFFSET MESS3
MOV AH,09
INT 21H ;显示提示信息
MOV AH,02H
MOV DH,8
MOV DL,30
MOV BH,0
INT 10H ;光标定位(8,30)
MOV AH,06
MOV AL,1
MOV CH,5
MOV CL,30
MOV DH,8
MOV DL,50
MOV BH,7
INT 10H ;屏幕上卷
CALL ADD_TO ;表达式输入
CMP AL,51H
JZ EXIT1 ;输入'Q',则退出
JMP NEXT1
NEXT11:
MOV AH,02H
MOV DH,11
MOV DL,44
MOV BH,0
INT 10H ;光标定位(11,44)
MOV DX,OFFSET MESS4
MOV AH,09
INT 21H ;显示提示信息
MOV AH,02H
MOV DH,8
MOV DL,30
MOV BH,0
INT 10H ;光标定位(8,30)
MOV AH,06
MOV AL,1
MOV CH,5
MOV CL,30
MOV DH,8
MOV DL,50
MOV BH,7
INT 10H ;屏幕上卷
CALL ADD_TO ;表达式输入
CMP AL,51H
JZ EXIT1 ;输入'Q',则退出
JMP NEXT11
PANDUAN:
CMP AL,51H
JZ EXIT1 ;输入'Q',则退出
JMP POS_CURSE
EXIT1:
MOV AH,4CH
INT 21H
ADD_TO PROC NEAR
CALL CHAR ;输入一个运算数(输入10/16进制数转换为2进制数BX)
MOV X,BX
CMP AL,2DH
JZ MINU
CMP AL,2AH
JZ MUL_
CMP AL,2FH
JZ DIV_
CMP AL,51H
JZ EXIT8
CALL CHAR
CALL CR_ ;显示'='
MOV Y,BX
ADD BX,X
JMP TO_
MINU:
CALL CHAR
CALL CR_
MOV Y,BX
MOV BX,X
CMP BX,Y
JL T_
SUB BX,Y
JMP TO_
MUL_:
CALL CHAR
CALL CR_
MOV Y,BX
MOV AX,X
MUL Y
MOV BX,AX
JMP TO_
DIV_:
CALL CHAR
CALL CR_
MOV Y,BX
MOV DX,0
MOV AX,X
DIV Y
MOV BX,AX
JMP TO_
T_:
MOV DL,2DH
MOV AH,02H
INT 21H
MOV BX,Y
SUB BX,X
TO_:
CALL BIN ;把BX结果转换为10/16进制输出
EXIT8:
RET
CR_ PROC NEAR
CMP AL,0DH
JNZ ESC_
MOV AH,02H
MOV DH,8
MOV DL,46
MOV BH,0
INT 10H ;光标定位(8,46)
MOV DL,3DH
MOV AH,02H
INT 21H ;显示=
ESC_:
RET
CR_ ENDP
CHAR PROC NEAR
CMP N,0
JZ NEXT2
CMP N,1
JZ NEXT3
NEXT2:
MOV BX,0
NEWCHAR1:
MOV AH,01H
INT 21H
CMP AL,30H
JL EXIT
CMP AL,39H
JG EXIT
SUB AL,30H
MOV AH,0
XCHG AX,BX
MOV CX,10
MUL CX
XCHG AX,BX
ADD BX,AX
JMP NEWCHAR1
NEXT3:
MOV BX,0
NEWCHAR2:
MOV AH,01H
INT 21H
CMP AL,30H
JL EXIT
CMP AL,3AH
JL NEXT4
CMP AL,41H
JL EXIT
CMP AL,46H
JGE EXIT
SUB AL,7
NEXT4:
MOV CL,4
SHL BX,CL
MOV AH,0
SUB AL,30H
ADD BX,AX
JMP NEWCHAR2
EXIT:
RET
CHAR ENDP
BIN PROC NEAR
CMP N,0
JZ NEXT5
CMP N,1
JZ NEXT6
NEXT5:
MOV CX,10000
CALL DEC_DIV
MOV CX,1000
CALL DEC_DIV
MOV CX,100
CALL DEC_DIV
MOV CX,10
CALL DEC_DIV
MOV CX,1
CALL DEC_DIV1
JMP EXIT9
NEXT6:
MOV CH,4
ROTATE:
MOV CL,4
ROL BX,CL
MOV DL,BL
AND DL,0FH
ADD DL,30H
CMP DL,3AH
JL PRINT
ADD DL,7H
JMP PRINT1
PRINT:
CMP DL,30H
JZ ROTATE1
PRINT1:
MOV AH,2
INT 21H
ROTATE1:
DEC CH
JNZ ROTATE
EXIT9:
RET
BIN ENDP
DEC_DIV PROC NEAR
MOV AX,BX
MOV DX,0
DIV CX
MOV BX,DX
CMP M,0 ;高位0不显示
JZ TO1_
CMP AL,0
JZ TO2_
TO1_:
MOV DL,AL
ADD DL,30H
MOV AH,02H
INT 21H
MOV AL,0
MOV M,AL
TO2_:
RET
DEC_DIV ENDP
DEC_DIV1 PROC NEAR
MOV AX,BX
MOV DX,0
DIV CX
MOV BX,DX
MOV DL,AL
ADD DL,30H
MOV AH,02H
INT 21H
RET
DEC_DIV1 ENDP
ADD_TO ENDP
CUR PROC NEAR
MOV AH,6
MOV AL,0
MOV CH,0
MOV CL,0
MOV DH,24
MOV DL,79
MOV BH,7
INT 10H ;清屏
MOV AH,2
MOV BH,0
MOV DH,4
MOV DL,25
INT 10H ;设光标位置(4,25)
MOV AH,9
MOV AL,'*'
MOV BH,0
MOV BL,9
MOV CX,42
INT 10H ;显示字符42个'*'
MOV AH,2
MOV BH,0
MOV DH,12
MOV DL,25
INT 10H ;设光标位置(12,25)
MOV AH,9
MOV AL,'*'
MOV BH,0
MOV BL,9
MOV CX,42
INT 10H ;显示字符42个*
MOV DH,4
CALL A
CALL A
CALL A
CALL A
CALL A
CALL A
CALL A
CALL A ;显示字符1列*(*,25)
MOV DH,4
CALL B
CALL B
CALL B
CALL B
CALL B
CALL B
CALL B
CALL B ;显示字符*1列(*,66)
RET
CUR ENDP
A PROC NEAR
MOV AH,2
MOV BH,0
INC DH
MOV DL,25
INT 10H ;设置光标位置(DH,25)
MOV AH,9
MOV AL,'*'
MOV BH,0
MOV BL,9
MOV CX,1
INT 10H ;显示一个*
RET
A ENDP
B PROC NEAR
MOV AH,2
MOV BH,0
INC DH
MOV DL,66
INT 10H
MOV AH,9
MOV AL,'*'
MOV BH,0
MOV BL,9
MOV CX,1
INT 10H
RET
B ENDP
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -