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

📄 henry03.asm

📁 程序运行时使PC机成为一架可弹奏的“钢琴”。当按下数字1~8时
💻 ASM
字号:
DATA SEGMENT
WORDS1 DB 'THIS IS A ELECTRONIC PIANO,INPUT 1-8!','$'
WORDS2 DW 524,588,660,698,784,880,988,1048
DATA ENDS
CODE SEGMENT
         ASSUME CS:CODE,DS:DATA
START:  MOV AX,DATA
          MOV DS,AX
         MOV BX,0H
         MOV DX,OFFSET WORDS1
          MOV AH,09H
          INT 21H                        ;显示WORDS1
         CALL CR  
   P1:   MOV AH,01H                       ;输入字符 
          INT 21H
          CMP AL,0DH                   ;回车就可以退出
          JZ  EXIT
         CMP AL,31H                       ;非1到8的数忽略
         JL  P1
         CMP AL,38H
         JG  P1
          SUB AL,31H                   ;ASCII码转为实际数值
         SHL AL,1H                            ;乘以2是因为表中存储的
                                           ;都是双字节的数
          MOV BL,AL                   ;键入的字符植转化为查表偏移量
         MOV DI,WORDS2[BX]         ;表中的数值传给DI寄存器
         CALL SINGING
          JMP P1
   EXIT: MOV AH,4CH
          INT 21H
   SINGING PROC                    ;发音的子程序
        MOV SI,02FFH
        MOV AL,0B6H                 ;B6H=10110110第二个计数器,
                                   ;先读低八位,再读高八位
        OUT 43H,AL    
        MOV DX,12H
        MOV AX,34DCH                ;被除数为34DCH
        DIV DI        
        OUT 42H,AL                   ;记数的初值存入计数器中
        MOV AL,AH
        OUT 42H,AL
        IN AL,61H                     ;读喇叭的端口地址61H
        MOV AH,AL
        OR AL,3                       ;打开与门
        OUT 61H,AL
        DELAY:   MOV CX,0FFFFH
            P2:   LOOP P2             ;做了一个延时
                  DEC SI
                  JNZ DELAY
                  MOV AL,AH
                  OUT 61H,AL         ;关闭与门
                  RET
    SINGING ENDP
CR:    MOV DL,0DH                  ;这里是换行
       MOV AH,02H
       INT 21H
       MOV DL,0AH
       INT 21H
       RET
code ends 
end start 

⌨️ 快捷键说明

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