如何在汇编程序中创建循环?

时间:2012-04-04 11:32:34

标签: assembly

所以我需要让系统扬声器发出嘟嘟声,我得到了这个

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增加

1 个答案:

答案 0 :(得分: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 - 有一个'家庭作业'标签!