2012-04-04 11 views
-1

だから、私はシステムスピーカーのビープ音を作成する必要があり、私はこのアセンブラでループを作成する方法は?

program lab1; 
begin 
asm 
MOV AL, 10110110b 
OUT 43h, AL 
MOV AX, 1000 ||<------ 1000 is N  
OUT 42h, AL 
MOV AL, AH 
OUT 42h, AL 
IN AL, 61h 
OR AL, 00000011b 
OUT 61h, AL 
MOV CX, 1000 
@N1:MOV DX, 0 
@N:NOP  
NOP  
NOP  
NOP 
DEC DX 
JNZ @N 
LOOP @N1  
IN AL, 61h  
AND AL, 11111100b  
OUT 61h, AL  
end  
end 

を持って、私はNが10000まあ千

答えて

0

増を取得する必要があることも、ループ内でこのすべてを作るために今必要とそのビープ音が鳴り、もう一度ビープ音を鳴らしたい場合は、おそらくそれを呼び出すのが最も簡単です。最終的にビープ音のような何かが働いたら、それをそのままにして、最後にRETを入れて呼んでください。

それがそうであるように、ALはその最初のOUTコールによって壊れてしまいます。多分、他のもの、BXにNを渡すべきでしょう。

MOV CX,10 
MOV BX,1000 
@nextN: 
PUSH CX 
PUSH BX 
CALL beep; 
POP BX 
POP CX 
ADD BX,1000 
LOOP @nextN 
RET 
.. 

@beep: 
MOV AL, 10110110b 
OUT 43h, AL 
MOV AX, BX  
.. 
RET  

PS - 「宿題」タブがあります。

関連する問題