سفارش تبلیغ
صبا ویژن

ویروس به زبان اسمبلی

TITLE Speaker Demo Program               (Speaker.asm)

INCLUDE Irvine16.inc ; 16-bit Real mode program
speaker  =  61h ; address of speaker port
timer    =  42h ; address of timer port
delay1   = 500
delay2   = 0D000h ; delay between notes
startPitch = 60

.code
main PROC
 in   al,speaker ; get speaker status
 push ax              ; save status
 or   al,00000011b    ; set lowest 2 bits
 out  speaker,al      ; turn speaker on
 mov  al,startPitch          ; starting pitch

L2:
 out  timer,al        ; timer port: pulses speaker

   ; Create a delay loop between pitches:
 mov  cx,delay1
L3: push cx ; outer loop
 mov  cx,delay2
L3a: ; inner loop
 loop L3a
 pop  cx
 loop L3

 sub  al,1            ; raise pitch
 jnz  L2              ; play another note

 pop  ax               ; get original status
 and  al,11111100b     ; clear lowest 2 bits
 out  speaker,al ; turn speaker off
 exit
main ENDP
END main