欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

匯編語言之實現(xiàn)發(fā)出各種聲音

 更新時間:2021年11月27日 09:57:48   作者:BoBoRing  
本文給大家分享一個練手小項目,響鈴設計項目,列出了響鈴,機槍聲音,音樂播放器的代碼,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧

軟件:emu8086

語言:匯編語言(Assembly)

注意:本文列出了響鈴,機槍聲音,音樂播放的代碼,第一個代碼為博主獨自一人編寫,所有代碼都會有瑕疵,謹慎使用。

9.響鈴設計

9.1設計要求:

要求掌握響鈴的使用方法。設計程序,從鍵盤接收輸入字符,如是數(shù)字N,則響鈴N次,如輸入為非數(shù)字,則不響鈴。

9.2設計思路:

判斷輸入為0~9之間,將N值給BP,設置響鈴延時次數(shù)CX輸出N次響鈴。

9.3程序清單:

DATA    SEGMENT
        pkey   DB  0AH,0DH,'please input the N:','$'
        ERR   DB  0AH,0DH,'eero!',0AH,0DH,'please input the N again:','$'
DATA    ENDS  

CODE    SEGMENT
        ASSUME  CS:CODE,DS:DATA
STATE:  MOV AX,DATA
        MOV DS,AX
        MOV ES,AX 
        
        LEA DX,pkey
        MOV AH,09H
        INT 21H                 ;DOS功能調用,輸出字符串

INPUT:  MOV AH,01H
        INT 21H
        CMP AL,'9'
        JA  eero
        CMP AL,'0'
        JB  eero
        SUB AL,30H              ;輸入為0~9,則AL為響鈴次數(shù)
        SUB AH,AH
        MOV BP,AX               ;BP為響鈴次數(shù)N
        
xiang:   MOV CX,4                ;CX為響鈴延時時間
        MOV AH,02H              
        MOV DL,07H
        INT 21H                 ;DOS功能調用,響鈴 
LP:     LOOP LP                 ;響鈴延時
        DEC BP  
        JNZ xiang               ;響鈴N次
        JMP STATE                
                
eero:    LEA DX,ERR
        MOV AH,9
        INT 21H                 ;輸出錯誤字符串
        JMP INPUT

CODE   ENDS

END  STATE

9.4程序運行結果及分析:

設置CX次數(shù)為延時次數(shù),BP次數(shù)為響鈴次數(shù),調用響鈴功能通過延時實現(xiàn)響鈴,起初會把延時次數(shù)和響鈴次數(shù)混淆導致錯誤。

圖9 響鈴設計結果

10.需要外接揚聲器的發(fā)聲程序

10.1機槍聲音

PROGRAM SEGMENT  
    
MAIN PROC FAR
        ASSUME CS:PROGRAM
        
        ORG 100H
STRAT:MOV CX,20D

NEW_SHOT:PUSH CX
         CALL SHOOT
         MOV CX,4000H 
         
SILENT:LOOP SILENT
       POP CX
       LOOP NEW_SHOT
       INT 20H 
       
MAIN ENDP    

SHOOT PROC NEAR  
    
      MOV DX,140H
      MOV BX,20H
      IN  AL,61H
      AND AL,11111100B 
      
SOUND:XOR AL,2
      OUT 61H,AL
      ADD DX,9248H
      MOV CL,3
      ROR DX,CL
      MOV CX,DX
      AND CX,1FFH
      OR CX,10    
      
WAIT: LOOP WAIT 

       DEC BX
       JNZ SOUND
       AND AL,11111100B
       OUT 61H,AL
       RET      
       
SHOOT ENDP   

PROGRAM ENDS 

END STRAT

10.2音樂播放

;定義數(shù)據段

data segment
     infor1 db 0Dh, 0AH, "welocom you to come here listeng! $"
     mus_freg  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_time  dw 6 dup (25),50                   ;節(jié)拍表
               dw 2 dup (25,25,50)
               dw 12 dup (25),100
data ends
;棧段定義
stack segment stack
      db 200 dup(?)
stack ends
;--------字符串輸出宏----------
SHOWBM MACRO b
     LEA DX,b
     MOV AH,9
     INT 21H
 ENDM
;----------音樂地址宏-----------
ADDRESS MACRO A,B
     LEA SI,A
     LEA BP,DS:B
ENDM
;代碼段定義
code segment
     assume ds:data, ss:stack, cs:code
start:
     mov ax, data
     mov ds, ax
     mov ax, stack
     mov ss, ax
     mov sp, 200   
     address mus_freg, mus_time
     call music
exit:     
     mov ah, 4cH
     int 21h
;------------發(fā)聲-------------
gensound proc near
     push ax
     push bx
     push cx
     push dx
     push di
     mov al, 0b6H
     out 43h, al
     mov dx, 12
     mov ax, 348ch
     div di
     out 42h, al
     mov al, ah
     out 42h, al 
     in al, 61h
     mov ah, al
     or al, 3
     out 61h, al
wait1:
     mov cx, 3314
     call waitf
delay1:
     dec bx
     jnz wait1
     mov al, ah
     out 61h, al
     pop di
     pop dx
     pop cx
     pop bx
     pop ax
     ret 
gensound endp

;--------------------------
waitf proc near
      push ax
waitf1:
      in al,61h
      and al,10h
      cmp al,ah
      je waitf1
      mov ah,al
      loop waitf1
      pop ax
      ret
waitf endp
;--------------發(fā)聲調用函數(shù)----------------
music proc near
      xor ax, ax
freg:
      mov di, [si]
      cmp di, 0FFFFH
      je end_mus
      mov bx, ds:[bp]
      call gensound
      add si, 2
      add bp, 2
      jmp freg
end_mus:
      ret
music endp
code ends
     end start

到此這篇關于匯編語言之實現(xiàn)發(fā)出各種聲音的文章就介紹到這了,更多相關匯編發(fā)出各種聲音內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 匯編 JCC指令表與筆記

    匯編 JCC指令表與筆記

    這篇文章主要介紹了匯編 JCC指令表與筆記,需要的朋友可以參考下
    2020-01-01
  • 匯編語言進制轉換之16進制轉10進制

    匯編語言進制轉換之16進制轉10進制

    這篇文章主要介紹了匯編語言進制轉換之16進制轉10進制,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • 匯編語言 寄存器內存訪問原理解析

    匯編語言 寄存器內存訪問原理解析

    這篇文章主要介紹了匯編語言 寄存器內存訪問原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • 匯編語言:x86匯編指令大全及其注意事項

    匯編語言:x86匯編指令大全及其注意事項

    用最精煉的語言,記錄匯編語言中所有常用或不常用或極其重要的匯編指令及其注意事項,以方便自己和讀者進行查閱,如有錯誤和不足請在評論區(qū)指出
    2021-10-10
  • UEFI開發(fā)實戰(zhàn)用戶交互界面使用說明VFR文件

    UEFI開發(fā)實戰(zhàn)用戶交互界面使用說明VFR文件

    這篇文章主要為大家介紹了UEFI開發(fā)實戰(zhàn)用戶交互界面使用說明VFR文件,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • 使用匯編實現(xiàn)字符串的大小寫轉換

    使用匯編實現(xiàn)字符串的大小寫轉換

    這篇文章主要介紹了使用匯編實現(xiàn)字符串的大小寫轉換,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • 匯編語言學習手把手的Debug教程

    匯編語言學習手把手的Debug教程

    這篇文章主要為大家分介紹了匯編語言學習的Debug教程內容,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2021-11-11
  • 淺析shellcode 反匯編模擬運行及調試方法

    淺析shellcode 反匯編模擬運行及調試方法

    這篇文章主要介紹了shellcode 反匯編,模擬運行以及調試方法,本文給大介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • 匯編語言入門教程阮一峰版

    匯編語言入門教程阮一峰版

    匯編語言是一種最低級、最古老、不具有移植性的編程語言,它能夠直接訪問計算機硬件,所以執(zhí)行效率極高,占用資源極少,一般用于嵌入式設備、驅動程序、實時應用、核心算法等
    2020-01-01
  • ARM匯編判斷之如何用匯編判斷數(shù)組中正負數(shù)個數(shù)

    ARM匯編判斷之如何用匯編判斷數(shù)組中正負數(shù)個數(shù)

    這篇文章主要介紹了ARM匯編判斷之如何用匯編判斷數(shù)組中正負數(shù)個數(shù),在匯編語言中程序的基本框架是不變的,這里我們可以直接把正向遍歷的程序給貼過來,然后我們思考怎么運用判斷后綴把數(shù)組中正數(shù)和負數(shù)分開,進行判斷個數(shù)和分別求和,需要的朋友可以參考下
    2022-04-04

最新評論