⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 3_2.asm

📁 试编写一程序
💻 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 + -