2012-04-04 3 views
-1

donc je dois faire bip des haut-parleurs du système et j'ai obtenu ceComment faire une boucle dans l'assembleur?

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 

et j'ai besoin maintenant de faire tout cela dans une boucle et que N doit obtenir 10000 augmentant de 1000

Répondre

0

Eh bien, Si ce code bipe et que vous voulez biper plus d'une fois, il est probablement plus facile de l'appeler. Chaque fois que vous avez finalement quelque chose qui fonctionne, comme votre routine de bip, laissez-le tranquille, mettez un RET sur la fin et appelez-le. Comme c'est le cas, AL est corrompu par ce premier appel OUT, alors peut-être que vous devriez passer le N dans quelque chose d'autre, BX, peut-être.

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 - il y a un onglet 'devoirs'!

Questions connexes