2012-04-04 2 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 увеличивается на 1000

ответ

0

Ну, если этот код подает звуковой сигнал, и вы хотите подать звуковой сигнал более одного раза, его, вероятно, проще всего назвать. Всякий раз, когда вы, наконец, получаете что-то работающее, например, ваш звуковой сигнал, оставьте его в покое, положите RET в конец и вызовите его.

Как бы то ни было, AL поврежден этим первым вызовом OUT, поэтому, возможно, вам следует передать N в чем-то другом, возможно, BX.

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 - есть вкладка «домашняя работа»!

Смежные вопросы