25鍵鋼琴書(3)

2021-05-12 08:55:32 字數 4091 閱讀 6358

;出口:dx=1退出總程式,dx=2回滾

musmenu  proc      near

push      ax

push      bp

push      si

stopm0:

call      clein       ;清除輸入框架中的內容

call      cursorp     ;置游標到輸入框的中心處

call      input

stop01:

cmp        al,'1'

jnz         stop02

push      dx

lea         dx,music_1

call      music_s

pop       dx

lea       si,mus_f1

lea       bp,ds:mus_t1

jmp       stopm1

stop02:

cmp       al,'2'

jnz         stop03

push      dx

lea        dx,music_2

call      music_s

pop       dx

lea       si,mus_f2

lea       bp,ds:mus_t2

jmp       stopm1

stop03:

cmp       al,'3'

jnz         stop04

push      dx

lea        dx,music_3

call      music_s

pop       dx

lea       si,mus_f3

lea       bp,ds:mus_t3

jmp       stopm1

stop04:

cmp       al,'4'

jnz         stop05

push      dx

lea        dx,music_4

call      music_s

pop       dx

lea       si,mus_f4

lea       bp,ds:mus_t4

jmp       stopm1

;就算已經等於1~4中的任何乙個數,而它依然會繼續執行下去,所以就會碰到,字母

;中的最後乙個r,接著就會跳到stopm0這個位置,重新要求輸入

stop05:

cmp       al,'q'

jnz        stop06

jmp       stopm2

stop06:

cmp       al,'r'

jnz        stop07

jmp       stopm3

stop07:

cmp       al,'q'

jnz        stop08

jmp       stopm2

stop08:

cmp       al,'r'

jnz        stopmq

jmp       stopm3

stopmq:

call      error

call      timelate

call      timelate

jmp        stopm0

stopm1:

call      music

jmp        stopm0

stopm2:

mov       dx,'1'      ;退出總程式

jmp        exitm2

stopm3:

mov       dx,'2'      ;回滾一層

exitm2:

call      timelate

call      timelate

pop       si

pop       bp

pop       ax

retmusmenu  endp

;入口si[頻率首位址]與bp[發音時間首位址]作為入口

push      bx

push      bp

push      di

freq:

mov       di,[si]     ;實參

cmp       di,-1

je           end_mus1    ;即jz(如果di==1,則跳到end_mus)

mov       bx,ds:[bp]  ;實參

call      soundf

mov       ah,01h      ;zf=0時,al=字元碼,ah=掃瞄碼

int         16h         ;zf=1時,緩衝區無按鍵等待

cmp       al,'e'

jz           end_mus1

cmp       al,'e'

jz           end_mus1

mov       al,'5'      ;'這個是我自己隨便設'

add       si,2        ;向後移乙個字

add       bp,2        ;向後移乙個字

jmp       freq        ;跳回到freq這個位置重新判斷

end_mus:

end_mus1:

pop       di

pop       bp

pop       bx

retmusic  endp

;入口bx[發音時長(要求是0.125秒的倍數)]與di[頻率]

soundf  proc      near

push      ax

push      cx

push      dx

mov       al,10110110b

out       43h,al

mov       dx,12h      ;因為11931000d=12348ch,所以dx用來存放高位

;扣除低四348ch剩下的12h

mov       ax,348ch    ;1193110/freq

div         di          ;因為除數為32位,所以可用來除以16位的,結果為16位,儲存在ax中

out       42h,al

mov       al,ah

out       42h,al

in           al,61h      ;

mov       ah,al       ;

or         al,3        ;

out       61h,al      ;

back:

mov       cx,8286     ;現為0.125秒

call      waitf

dec       bl

jnz        back

mov       al,ah

out       61h,al

pop       dx

pop       cx

pop       ax

retsoundf  endp

;入口cx,控制時間基數

waitf  proc      near

push      ax

waitf1:                        ;15.08微秒

in           al,61h

and       al,10h

cmp       al,ah

je           waitf1

mov       ah,al

loop      waitf1

pop        ax

retwaitf  endp

code  ends

end       main

執行介面:

主選單:

鋼琴介面:

點歌介面:

退出介面:

LilyPond教程(3) 鋼琴獨奏片段 I

本篇的學習要點有 首先,給出示例的 如下 version 2.20.0 language english header score new staff fixed c new staff fixed c 本篇教程不涉及 layout部分的 內容,大家可以把這段複製到自己的ly檔案中,以使樂譜有較好的...

2 5 PyCharm常用快捷鍵

pycharm常用的快捷鍵有很多,但是下面我們列出平常比較實用的 ctrl c 不需要選中一行,當游標在一行任意位置時,使用這個可以直接複製整行的內容 ctrl d 直接複製游標所在行的內容到下一行 ctrl shift n 快速搜尋查詢專案中的檔案 ctrl a 全選 ctrl alt l 選中的...

作業3月25號

1 檔案內容如下,標題為 姓名,性別,年紀,薪資 egon male 18 3000 alex male 38 30000 wupeiqi female 28 20000 yuanhao female 28 10000 要求 從檔案中取出每一條記錄放入列表中,列表的每個元素都是的形式 dic lis...