📄 3_2.asm
字号:
;数据段设置
DATA SEGMENT
MSG DB 'Please Enter The Month(1--12)',0dh,0ah,'$' ;提示用户输入月份
JAN DB ' ------- Jan',0dh,0ah,'$' ;1月份
FEB DB ' ------- Feb',0dh,0ah,'$' ;2月份
MAR DB ' ------- Mar',0dh,0ah,'$' ;3月份
APR DB ' ------- Apr',0dh,0ah,'$' ;4月份
MAY DB ' ------- May',0dh,0ah,'$' ;5月份
JUN DB ' ------- Jun',0dh,0ah,'$' ;6月份
JUL DB ' ------- Jul',0dh,0ah,'$' ;7月份
AUG DB ' ------- Aug',0dh,0ah,'$' ;8月份
SEP DB ' ------- Sep',0dh,0ah,'$' ;9月份
OCT DB ' ------- Oct',0dh,0ah,'$' ;10月份
NOV DB ' ------- Nov',0dh,0ah,'$' ;11月份
DECE DB ' ------- Dec',0dh,0ah,'$' ;12月份
MONTH DB 8,?,8 DUP(?) ;保存用户输入的月份
MSGER DB 'Wrong Month!',0dh,0ah,0dh,0ah,'$' ;出错信息
CR DB 13,10,'$' ;换行
TABLE DW MON1,MON2,MON3,MON4,MON5,MON6
DW MON7,MON8,MON9,MON10,MON11,MON12
DATA ENDS
SSEG SEGMENT PARA STACK 'STACZK'
DW 100H DUP(0) ;初始化堆栈大小为100
SSEG ENDS
;**************************************************************
PROGNAM SEGMENT
ASSUME CS:PROGNAM,DS:DATA,SS:SSEG
MAIN PROC FAR ;主程序入口
MOV AX,DATA
MOV DS,AX
MOV ES,AX ;DS = ES
START:
MOV DX,OFFSET MSG ;提示输入月份
MOV AH,09H
INT 21H
LEA DX,MONTH
MOV AH,0AH ;等待输入
INT 21H
MOV DX,OFFSET CR
MOV AH,09H
INT 21H
MOV DL,MONTH+1 ;获取月份的位数
CMP DL,1
JE CHANGE1 ;是1-9月份,跳转到CHANGE1
CMP DL,2
JE CHANGE2 ;10,11,12,跳转到CHANGE2
JMP ERROR ;其他位数,报错
CHANGE1: ;1-9月份
MOV AH,MONTH+2
CMP AH,'0'
JE ERROR ;不存在0月份
JMP _TABLE
CHANGE2: ;10,11,12
MOV AH,MONTH+2
MOV AL,MONTH+3
CMP AH,'1'
JNE ERROR ;十位数不为1,报错
CMP AL,'2' ;大于12月,报错
JG ERROR
CMP AL,'0' ;10
JE _OCT
CMP AL,'1' ;11
JE _NOV
MOV AH,12 ;12
_TABLE:
AND AH,0FH ;将ASCII码转转换为数字
DEC AH
SHL AH,1
MOV BL,AH
MOV BH,00
JMP TABLE[BX] ;段内间接转移:IP←[table+bx]
_OCT:
MOV AH,10
JMP _TABLE
_NOV:
MOV AH,11
JMP _TABLE
ERROR: ;报错
MOV DX,OFFSET MSGER
MOV AH,09H
INT 21H
JMP START
SHOW:
MOV AH,09H ;显示月份
INT 21H
JMP START
EXIT:
MOV AX,4C00H ;调用DOS中断,返回系统
INT 21H
MON1:
MOV DX,OFFSET JAN ;处理MON1
JMP SHOW
MON2:
MOV DX,OFFSET FEB ;处理MON2
JMP SHOW
MON3:
MOV DX,OFFSET MAR ;处理MON3
JMP SHOW
MON4:
MOV DX,OFFSET APR ;处理MON4
JMP SHOW
MON5:
MOV DX,OFFSET MAY ;处理MON5
JMP SHOW
MON6:
MOV DX,OFFSET JUN ;处理MON6
JMP SHOW
MON7:
MOV DX,OFFSET JUL ;处理MON7
JMP SHOW
MON8:
MOV DX,OFFSET AUG ;处理MON8
JMP SHOW
MON9:
MOV DX,OFFSET SEP ;处理MON9
JMP SHOW
MON10:
MOV DX,OFFSET OCT ;处理MON10
JMP SHOW
MON11:
MOV DX,OFFSET NOV ;处理MON11
JMP SHOW
MON12:
MOV DX,OFFSET DECE ;处理MON12
JMP SHOW
MAIN ENDP
PROGNAM ENDS
END MAIN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -