📄 cxc002.asm
字号:
POP DX
POP CX
RET
RAND ENDP
;******************************************************************************************
BINDEC PROC NEAR ;二进制-->十进制 (二位数)子程序
PUSH BX
PUSH CX
MOV CX,10 ;除以10
CALL DECDIV
MOV CX,1 ;除以1
CALL DECDIV
POP CX
POP BX
RET
BINDEC ENDP
;******************************************************************************************
DECDIV PROC NEAR ;二进制-->十进制(一位数)子程序
MOV AX,BX ;BX->AX,(DX,AX)作被除数,商->AX
MOV DX,0 ;DX清0,余数->DX
DIV CX ;CX存转换量级
MOV BX,DX
MOV DL,AL
ADD DL,30H
MOV AH,02 ;调用DOS(21H)2号功能
INT 21H
RET
DECDIV ENDP
;******************************************************************************************
DECBIN PROC NEAR ;十进制-->二进制子程序
MOV BX,0
NEWCHAR: MOV AH,1 ;键盘输入
INT 21H ;调用DOS(21H)1号功能
MOV DL,AL
SUB AL,30H ;ASCⅡ码-->二进制
JL EXIT ;是否<0
CMP AL,9
JG EXIT ;是否>9
CBW
XCHG AX,BX ;交换AX,BX
MOV CX,10
MUL CX
XCHG AX,BX
ADD BX,AX
JMP NEWCHAR
EXIT: RET
DECBIN ENDP
;******************************************************************************************
CRLF PROC NEAR ;回车换行子程序
MOV DL,0AH ;换行
MOV AH,02
INT 21H
MOV DL,0DH ;回车
MOV AH,02
INT 21H
RET
CRLF ENDP
;******************************************************************************************
BINDEC1 PROC NEAR ;二进制-->十进制(三位数)子程序
PUSH BX
PUSH CX
MOV CX,100
CALL DECDIV ;调用二进制->十进制(一位数)子程序
MOV CX,10
CALL DECDIV
MOV CX,1
CALL DECDIV
POP CX
POP BX
RET
BINDEC1 ENDP
;******************************************************************************************
VALUE PROC NEAR ;输出评语子程序
CMP BX,100
JE JP10
CMP BX,90
JE JP9
CMP BX,80
JE JP78
CMP BX,70
JE JP78
CMP BX,60
JE JP06
JB JP05
JP05: JMP JP5
JP06:JMP JP6
JP10:
CALL BINDEC1 ;100为三位数
DISPCOLOR MESS7,LENMESS7,24,04H,0 ;100为优秀
JMP RET1
JP9:
CALL BINDEC
DISPCOLOR MESS7,LENMESS7,24,04H,0 ;90也为优秀
JMP RET1
JP78:
CALL BINDEC
DISPCOLOR MESS8,LENMESS8,24,04H,0 ;70-80为良好
JMP RET1
JP6:
CALL BINDEC
DISPCOLOR MESS9,LENMESS9,24,04H,0 ;60为刚及格
JMP RET1
JP5:
CALL BINDEC
DISPCOLOR MESS10,LENMESS10,24,04H,0 ;60以下不及格
RET1:
RET
VALUE ENDP
;******************************************************************************************
RETURN PROC NEAR ;循环演练试题子程序
DISPCOLOR MESS11,LENMESS11,24,02H,1
MOV AH,01
INT 21H
CMP AL,'Y' ;输入Y或Y,再来一次
JE START1
CMP AL,'y'
JE START1
CMP AL,'N' ;输入N或N,及其他字符均返回
JE RET01
CMP AL,'n'
JE RET01
RET01:
CALL CRLF
;MOV AH,4CH
;INT 21H
RET
START1:JMP START
RETURN ENDP
;******************************************************************************************
SHOWQNUM PROC NEAR
DISP1 '(' ;输出左括号
ADD Z,1
MOV BX,Z ;输出题目序号
CALL BINDEC
DISP1 ')' ;输出右括号
DISP1 20H ;输出空格
RET
SHOWQNUM ENDP
;******************************************************************************************
TIMECXC PROC NEAR ;调用系统时间
DISPLAY: MOV AH,2CH
INT 21H
MOV BL,10
MOV AX,0
MOV AL,CH ;将CH中存放的"时"取出
DIV BL
ADD AX,3030H ;数字转化为字符
MOV [SYSTIME],AL ;存放至相应单元
MOV [SYSTIME+1],AH
MOV AX,0
MOV AL,CL ;将CL中存放的"分"取出
DIV BL
ADD AX,3030H
MOV [SYSTIME+3],AL ;存放至相应单元
MOV [SYSTIME+4],AH
MOV AX,0
MOV AL,DH ;将DH中存放的"秒"取出
DIV BL
ADD AX,3030H
MOV [SYSTIME+6],AL ;存放至相应单元
MOV [SYSTIME+7],AH
WIN 0,1DH,24,69,24,78 ;置显示背景及字体颜色属性
POS_CURSE 0,24,70 ;置光标属性
DISP SYSTIME
MOV BX,350
RE: MOV CX,33144 ;时间延迟
REA: LOOP REA
DEC BX
JNZ RE
JE DISPLAY
RET
TIMECXC ENDP
;******************************************************************************************
SYSDATE PROC NEAR ;显示系统日期
MOV AH,2AH
INT 21H
MOV BL,10D
MOV AX,0
MOV AL,DH ;将DH中存放的月份取出
DIV BL
ADD AX,3030H
MOV [DATE+5],AL ;存放至相应单元
MOV [DATE+6],AH
MOV AX,0
MOV AL,DL ;将DL中存放的日期取出
DIV BL
ADD AX,3030H
MOV [DATE+8],AL ;存放至相应单元
MOV [DATE+9],AH
WIN 0,2EH,0,69,0,78 ;置显示背景及字体颜色属性
POS_CURSE 0,0,69 ;置光标属性
MOV DX,OFFSET DATE
MOV AH,09H
INT 21H
RET
SYSDATE ENDP
;******************************************************************************************
CLINT PROC NEAR ;自设时间中断子过程
PUSH DS
PUSH BX
MOV BX,DATA
MOV DS,BX
LEA BX,COUNT
INC WORD PTR[BX]
CMP WORD PTR[BX],18 ;18次中断为1秒
JNE RETURN1
CALL INCT ;调用分秒转换子程序
ADJ:
CMP HOURS,12 ;处理"时"
JLE RETURN1
SUB HOURS,12
RETURN1:
POP BX
POP DS
STI
IRET
CLINT ENDP
;******************************************************************************************
INCT PROC NEAR ;分秒转换子程序
MOV WORD PTR[BX],0
ADD BX,2
INC WORD PTR[BX]
CMP WORD PTR[BX],60 ;60秒为1分
JNE EXIT1
CALL INCT
EXIT1: RET
INCT ENDP
;******************************************************************************************
DISPTIME PROC NEAR ;显示计时器时间
MOV AX,MIN ;显示"分"
CALL BINDECCXC1
MOV BX,0
MOV AL,':'
MOV AH,0EH
INT 10H
MOV AX,SEC ;显示"秒"
CALL BINDECCXC1
MOV BX,0
MOV AL,':'
MOV AH,0EH
INT 10H
MOV BX,COUNT ;显示"毫秒"
MOV AL,55
MUL BL
CALL BINDECCXC
RET
DISPTIME ENDP
;******************************************************************************************
BINDECCXC PROC NEAR ;为显示时间而服务的二进制->十进制(3位)
MOV CX,100
CALL DECDIVCXC
MOV CX,10
CALL DECDIVCXC
MOV CX,1
CALL DECDIVCXC
RET
BINDECCXC ENDP
;******************************************************************************************
BINDECCXC1 PROC NEAR ;为显示时间而服务的二进制->十进制(2位)
MOV CX,10
CALL DECDIVCXC
MOV CX,1
CALL DECDIVCXC
RET
BINDECCXC1 ENDP
;******************************************************************************************
DECDIVCXC PROC NEAR ;为显示时间而服务的二进制->十进制(1位)
MOV DX,0
DIV CX
MOV BX,0
ADD AL,30H
MOV AH,0EH
INT 10H
MOV AX,DX
RET
DECDIVCXC ENDP
;******************************************************************************************
CODE ENDS
END START
;☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
;☆ Designed by Chengxiangchuang | Http://Austjsj021.go.nease.net ☆
;☆ E_mail:cxc-0378@163.com | Copyright (C) 2005 Chengxiangchuang All Rights Reserved ☆
;☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
;信息统计:中文字数:2773;英文字符数:18667;总行数:615(我们寝室号)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -