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

📄 keshe.asm

📁 汇编语言多编写的 ASM 能够实现三级菜单 完整的课程设计论文 可以交的
💻 ASM
📖 第 1 页 / 共 2 页
字号:
        SHOW  MACRO     B
              LEA       DX,B
              MOV       AH,9
              INT       21H
              ENDM
;**********************音乐地址宏 
     ADDRESS  MACRO     A,B
              LEA       SI,A
              LEA       BP,DS:B
              ENDM
         WIN  MACRO     OPR1,OPR2,OPR3,OPR4,OPR5,OPR6       ;建立窗口 宏定义
              MOV       AH,06H
              MOV       AL,OPR1
              MOV       BH,OPR2
              MOV       CH,OPR3
              MOV       CL,OPR4
              MOV       DH,OPR5
              MOV       DL,OPR6
              INT       10H
              ENDM
     DATAREA  SEGMENT
      THIRTY  DB        50
        MSG0  DB        '1 string operate                                  '
        MSG1  DB        '2 listen the music                                '
        MSG2  DB        '3 exit                                            '
        MSG3  DB        'convert decimal onkeybd to hex on screen          '
        MSG4  DB        'count  the number                                 '
        MSG5  DB        '3music                                            '
        MSG6  DB        'input 4 Active convert decimal to hex             '
        MSG7  DB        'input 5 Active count  the number                  '
        MSG8  DB        'convert decimal onkeybd to hex on screen          '
        MSGA  DB        'count  the number                                 '
        MSGB  DB        'please input counts                               '
        MSG9  DB        'please input a count                              '
        MSGC  DB        'Do you really exit $ '
      ;ERRMSG  DB        'error!                                            '
    MESSAGE1  DB        'Welcome to the system!',13,10,13,10
              DB        'The function of the program will scoring how many numbers you enter.',13,10,13,10
              DB        'Please enter a string:',13,10,'$'
          CR  DB        13,10,'$'
     ;RESULT1  DB        'The string is:',13,10,'$'
     RESULT2  DB        'The quantity of numbers is:',13,10,'$'
      STRING  DB        100
              DB        0
              DB        80 DUP(0)   ;定义缓冲区
       AGAIN  DB        'Do you want to try again?(Y or N)',13,10,'$'
      ; ERROR  DB        'ERROR!',13,10,'Please enter the right letters.',13,10,'$'  ;错误提示
       INFO1  DB        0DH,0AH,'WELCOME YOU TO COME HERE!$'
       INFO2  DB        0DH,0AH,'this is a music program!$'
       INFO3  DB        0DH,0AH,'please select!$'
       INFO4  DB        0DH,0AH,'INPUT ERROR!$'
       INFO5  DB        0DH,0AH,'PLEASE INPUT AGAIN!$'
     MUSLIST  DB        0DH,0AH,'A MUSIC1'
              DB        0DH,0AH,'B MUSIC2'
              DB        0DH,0AH,'C MUSIC3'
              DB        0DH,0AH,'Q EXIT'
              DB        0DH,0AH,'$'
;音乐一********************************************************* 
   MUS_FREG1  DW        330,294,262,294,3 DUP (330)
              DW        3 DUP (294),330,392,392
              DW        330,294,262,294,4 DUP (330)
              DW        294,294,330,294,262,-1
   MUS_TIME1  DW        6 DUP (25),50
              DW        2 DUP (25,25,50)
              DW        12 DUP (25),100
;*********************************************************音乐二 
   MUS_FREG2  DW        330,392,330,294,330,392,330,294,330
              DW        330,392,330,294,262,294,330,392,294
              DW        262,262,220,196,196,220,262,294,332,262,-1
   MUS_TIME2  DW        3 DUP(50),25,25,50,25,25,100
              DW        2 DUP(50,50,25,25),100
              DW        3 DUP(50,25,25),100
;********************************************************音乐三 
   MUS_FREG3  DW        262,262,294,262,349
              DW        330,262,262,294,262
              DW        392,349,262,262,523
              DW        440,349,262,262,466
              DW        466,440,262,392,349,-1

   MUS_TIME3  DW        50,50,100,100,100
              DW        100,100,50,50,100,100
              DW        100,100,100,50,50,100
              DW        100,100,100,100,100,50
              DW        50,100,100,100,100,100
     DATAREA  ENDS
 ;===============================================================
     PROGNAM  SEGMENT
        MAIN  PROC      FAR
              ASSUME    CS:PROGNAM,DS:DATAREA
      START:
              PUSH      DS
              SUB       AX,AX
              PUSH      AX
              MOV       AX,DATAREA
              MOV       DS,AX
;========================================================
    BEGIN100  PROC      NEAR
     BEGIN0:  MOV       BX,OFFSET MSG0
              CALL      DISPLAY1
              MOV       DL,0DH
              CALL      DISPCHAR
              MOV       DL,0AH
              CALL      DISPCHAR
     BEGIN1:  MOV       BX,OFFSET MSG1
              CALL      DISPLAY1
              MOV       DL,0DH
              CALL      DISPCHAR
              MOV       DL,0AH
              CALL      DISPCHAR
     BEGIN2:  MOV       BX,OFFSET MSG2
              CALL      DISPLAY1
              MOV       DL,0DH
              CALL      DISPCHAR
              MOV       DL,0AH
              CALL      DISPCHAR
    BEGIN100  ENDP
;-----------------------------------------------------------
       BEGIN  PROC      NEAR
              MOV       AH,1
              INT       21H
              CMP       AL,'1'
              JE        NEXT
              CMP       AL,'2'
              JE        MUSIC1
              CMP       AL,'3'
              JE        D
          D:  CALL      CLEARSCREEN
              CALL      EXIT3
       BEGIN  ENDP
     MUSIC1:  CALL      MUSIC2
              CALL      GENSOUND
              CALL      WAITF
              CALL      MUSIC
       NEXT:  CALL      CLEARSCREEN
              MOV       BX,OFFSET MSG3
              CALL      DISPLAY1
              MOV       DL,0DH
              CALL      DISPCHAR
              MOV       DL,0AH
              CALL      DISPCHAR
              MOV       BX,OFFSET MSG4
              CALL      DISPLAY1
              MOV       DL,0DH
              CALL      DISPCHAR
              MOV       DL,0AH
              CALL      DISPCHAR
              MOV       BX,OFFSET MSG6
              CALL      DISPLAY1
              MOV       DL,0DH
              CALL      DISPCHAR
              MOV       DL,0AH
              CALL      DISPCHAR
              MOV       BX,OFFSET MSG7
              CALL      DISPLAY1
              MOV       DL,0DH
              CALL      DISPCHAR
              MOV       DL,0AH
              CALL      DISPCHAR
              CALL      D_HXCHG
     D_HXCHG  PROC      NEAR
              MOV       AH,7
              INT       21H
              CALL      CLEARSCREEN
              CMP       AL,'4'
              JE        A
              CMP       AL,'5'
              JE        B
          A:  CALL      CLEARSCREEN
              MOV       BX,OFFSET MSG8
              CALL      DISPLAY1
              CALL      CRLF
              MOV       BX,OFFSET MSG9
              CALL      DISPLAY1
              CALL      CRLF
              CALL      DECIBIN
              CALL      BINIHEX
              CALL      EXIT3
          B:
              CALL      CRLF
              MOV       BX,OFFSET MSGA
              CALL      DISPLAY1
              CALL      CRLF
              MOV       BX,OFFSET MSGB
              CALL      DISPLAY1
              CALL      CRLF
              CALL      HEAD
              CALL      HEAD1
              CALL      EXIT3
     D_HXCHG  ENDP
        MAIN  ENDP
 ;=================子程序======================================
        HEAD  PROC      NEAR
              LEA       DX,MESSAGE1 ;输出提示语
              MOV       AH,09H
              INT       21H
              LEA       DX,STRING
              MOV       AH,0AH
              INT       21H         ;字符串输入
              LEA       DX,CR
              MOV       AH,09H
              INT       21H         ;回车换行
              LEA       SI,STRING+2 ;把字符串首地址存入SI
              ;MOV       CL,STRING+1 ;把字符个数存入CX
              ;MOV       CH,0
              MOV       BL,30H      ;置BL为字符0
        HEAD  ENDP
       HEAD1  PROC      NEAR
              MOV       CX,10
      LOOP1:                        ;LOOP1用于判断字符是否为数字
              MOV       DL,[SI]
              CMP       DL,'0'
              JB        LOOP2
              CMP       DL,'9'
              JA        LOOP2       ;ASCII码小于0和大于9的BL+1,其他情况不加
              INC       BL
      LOOP2:                        ;LOOP2实现指针向下一位移动
              MOV       DL,[SI]
              MOV       AH,02H
              INT       21H
              INC       SI          ;SI自加,判断下一个字符
              DEC       CX          ;CX自减,最终将是0
              JNE       LOOP1       ;CX非零时,跳回NEXT1
              LEA       DX,CR
              MOV       AH,09H
              INT       21H
              LEA       DX,CR
              MOV       AH,09H
              INT       21H
              LEA       DX,RESULT2
              MOV       AH,09H
              INT       21H
              MOV       DL,BL
              MOV       AH,02H
              INT       21H
              LEA       DX,CR
              MOV       AH,09H
              INT       21H
       HEAD1  ENDP
;--------------------------------------------------
    DISPLAY1  PROC      NEAR
              MOV       CX,50
      DISP1:  MOV       DL,[BX]
              CALL      DISPCHAR
              INC       BX
              LOOP      DISP1

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -