-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

4

1 回答 1

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 - 有一个“家庭作业”标签!

于 2012-04-04T11:56:23.420 回答