📄 ch.asm
字号:
GOTOXY MACRO X,Y
PUSH AX
PUSH BX
PUSH DX
MOV DH,X
MOV DL,Y
MOV BH,0
MOV AH,02H
INT 10H
POP DX
POP BX
POP AX
ENDM
DATA SEGMENT
STR1 DB '************* CHU ZU CHE JI JIA QI *************$'
STR2 DB '********* PRICE: 4.00 YUN/K 0.2 YUN/M *********$'
STR3 DB '********* TIME : 0.0 (M) *********$'
STR4 DB '********* DIST : 0.0 (KM) *********$'
STR5 DB '********* COST : 0.0 (YUAN) *********$'
STR6 DB '************************************************$'
STR7 DB '********************* HELP *********************$'
STR8 DB ' 1. PRESS S TO START $'
STR9 DB ' 2. PRESS C TO CHANGE THE PTICE $'
STR10 DB ' 3. PRESS G FOR ONE HUNDRED METERS$'
STR11 DB ' 4. PRESS R TO RESTART $'
STR12 DB ' 5. PRESS Q TO EXIT $'
STR22 DB '********* PRICE: YUN/K YUN/m *********$'
STR33 DB 'PRESS THE KEY! $'
BEG DW ?
ENN DW ?
PRICES DW 4H ;元/100米
PRICES1 DW 2H ;时间单价
TIMES DW 0 ;分
COSTS DW 0 ;100的钱
DISTS DW 0 ;路程
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
MAIN PROC
MOV AX,DATA
MOV DS,AX
MOV ES,AX
_INI: CALL INI
_SCAN1: GOTOXY 13,0
MOV SI,OFFSET STR33
MOV DX,SI
MOV AH,09H
INT 21H
GOTOXY 13,15
_SCAN2: MOV BL,AL
CALL SCAN1
CMP AL,0DH
JNZ _SCAN2
MOV AL,BL
CMP AL,'S'
JZ _TIME
CMP AL,'G'
JZ _COST
CMP AL,'R'
JZ _INI
CMP AL,'Q'
JZ _RET
JMP _SCAN1
_TIME: CALL _TIMES
JMP _SCAN1
_COST: CALL GETT
MOV CH,CL
MOV CL,DH
MOV ENN,CX
CALL NOWCOST
JMP _SCAN1
_RET: MOV AH,4CH
INT 21H
MAIN ENDP
_TIMES PROC
CALL GETT
MOV CH,CL
MOV CL,DH
MOV BEG,CX
RET
_TIMES ENDP
MYADD PROC
PUSH AX
MOV AX,0
ADD DL,BL
ADD DH,BH
CMP DL,10
JB MYRET
ADD DH,1
SUB DL,10
MYRET: POP AX
RET
MYADD ENDP
NOWCOST PROC
MOV DX,ENN
MOV BX,BEG
GOTOXY 2,17
;CALL _TEST
CALL TIME_D
MOV DX,COSTS ;取距离钱
MOV BX,PRICES ;取距离单价
CALL MYADD ;结果保存在DX中 入口DX,BX
MOV COSTS,DX
MOV BX,TIMES ;取时间
MOV AX,0
MOV AL,BH ;小时
MOV CL,60
MUL CL ;小时转化为分保存在AX中
MOV BH,0
ADD AX,BX ;现在保存的是时间单位为分
MOV BX,PRICES1
MUL BX ;时间费用保存在AX中单位角
MOV BL,10
DIV BL ;AL=元 AH=角
MOV DX,COSTS
MOV BH,AL
MOV BL,AH
CALL MYADD
GOTOXY 4,17
CALL PRINTDX
MOV DX,DISTS
MOV BX,1
CALL MYADD
MOV DISTS,DX
GOTOXY 3,17
CALL PRINTDX
RET
NOWCOST ENDP
GETT PROC
MOV AH,2CH
INT 21H
RET
GETT ENDP
;计算时间并显示
TIME_D PROC
SUB DL,BL
JNS AA1
ADD DL,60 ;现在的秒减以前的秒,若不够减,则秒减1且1/100秒加上100
DEC DH
AA1: SUB DH,BH
JNS AA2
ADD DH,60 ;现在的秒减以前的秒,若不够减,则秒加上60
AA2: PUSH DX ;时间差保存起来
MOV TIMES,DX
CALL PRINTDX
POP DX
RET
TIME_D ENDP
;调用显示功能
;DX
PRINTDX PROC
PUSH AX
PUSH DX
MOV AL,DH ;并送显示
CALL SHOW_T
CALL COMMA
MOV AL,DL
CALL SHOW_T
POP DX
POP AX
RET
PRINTDX ENDP
;AL为入口参数
SHOW_T PROC
PUSH AX
PUSH BX
PUSH DX
CMP AL,10
JAE BIG10
;CALL _TEST
ADD AL,30H
MOV DL,AL
MOV AH,02H
INT 21H
JMP _OUT
BIG10: MOV AH,0
MOV BL,10
DIV BL
MOV BH,AL
MOV BL,AH
ADD BH,30H
MOV DL,BH
MOV AH,02H
INT 21H
ADD BL,30H
MOV DL,BL
MOV AH,02H
INT 21H
_OUT: POP DX
POP BX
POP AX
RET
SHOW_T ENDP
;显示冒号
COMMA PROC
PUSH AX
PUSH DX
MOV AH,2
MOV DL,'.'
INT 21H
POP DX
POP AX
RET
COMMA ENDP
PUTS PROC
PUSH AX
PUSH DX
MOV DL,0AH
MOV AH,02H
INT 21H
MOV DL,0DH
MOV AH,02H
INT 21H
POP DX
POP AX
RET
PUTS ENDP
_TEST PROC
PUSH AX
PUSH DX
MOV DL,'&'
MOV AH,02H
INT 21H
POP DX
POP AX
RET
_TEST ENDP
INI PROC
PUSH AX
PUSH DX
MOV AX,0
MOV AL,2
INT 10H
MOV SI,OFFSET STR1
MOV DX,SI
MOV AH,09H
INT 21H
CALL PUTS
MOV SI,OFFSET STR2
MOV DX,SI
MOV AH,09H
INT 21H
CALL PUTS
MOV SI,OFFSET STR3
MOV DX,SI
MOV AH,09H
INT 21H
CALL PUTS
MOV SI,OFFSET STR4
MOV DX,SI
MOV AH,09H
INT 21H
CALL PUTS
MOV SI,OFFSET STR5
MOV DX,SI
MOV AH,09H
INT 21H
CALL PUTS
MOV SI,OFFSET STR6
MOV DX,SI
MOV AH,09H
INT 21H
CALL PUTS
CALL PUTS
MOV SI,OFFSET STR7
MOV DX,SI
MOV AH,09H
INT 21H
CALL PUTS
MOV SI,OFFSET STR8
MOV DX,SI
MOV AH,09H
INT 21H
CALL PUTS
MOV SI,OFFSET STR9
MOV DX,SI
MOV AH,09H
INT 21H
CALL PUTS
MOV SI,OFFSET STR10
MOV DX,SI
MOV AH,09H
INT 21H
CALL PUTS
MOV SI,OFFSET STR11
MOV DX,SI
MOV AH,09H
INT 21H
CALL PUTS
MOV SI,OFFSET STR12
MOV DX,SI
MOV AH,09H
INT 21H
CALL PUTS
MOV AX,0
MOV COSTS,AX
MOV DISTS,AX
POP DX
POP AX
RET
INI ENDP
SCAN1 PROC
MOV AH,1H
INT 21H
RET
SCAN1 ENDP
CODE ENDS
END MAIN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -