|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: May 2006
Messaggi: 21
|
[assembly]introdurre ritardo
Ciao a tutti, ho bisogno di un consiglio su assembly.
Nel mio programma devo introdurre un ritardo di circa un secondo..... per ora uso un ciclo di NOP, ma so che non è una cosa molto elegante!!! Qualcuno ha qualche consiglio ? Qual'è il modo migliore per introdurre un ritardo di questo ordine di grandezza? grazie a tutti in anticipo!! |
|
|
|
|
|
#2 |
|
Bannato
Iscritto dal: Feb 2003
Messaggi: 947
|
Codice:
; Ritardo di un secondo (circa) ; ; Nota: esiste la possibilta' di ottenere ; qualcosa di assai piu' preciso DTIMESECS EQU 1 TIMERTICKSOFF EQU 6Ch TICKSPERSECS EQU 18 push ds push 40h pop ds push eax push ebx mov eax,dword [TIMERTICKSOFF] loop_delay: mov ebx,dword [TIMERTICKSOFF] sub ebx,eax cmp ebx,DTIMESECS * TICKSPERSECS jbe loop_delay pop ebx pop eax pop ds Codice:
mov ah,86h mov cx,0Fh mov dx,4240h int 15h Ultima modifica di repne scasb : 28-07-2006 alle 09:15. |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#4 |
|
Junior Member
Iscritto dal: May 2006
Messaggi: 21
|
Si, purtroppo non funziona su xp....cmq ringrazio molto repne scasb, la prima funzione che hai postato mi sarà sicuramente utilissima!!!! grazie!
La |
|
|
|
|
|
#5 | |
|
Bannato
Iscritto dal: Feb 2003
Messaggi: 947
|
Quote:
Cio' mi e' noto, non mi era noto che ti servisse del codice x86/16-bit da far girare con Windows XP. Comunque puoi riscrivere la funzione 86h dell'int 15h: Codice:
; DX:AX = Attesa in microsecondi ; ; Attende n microsecondi Delay_Mcs proc near pushad push dx push ax pop eax imul eax,315d xor edx,edx mov ebx,264d div ebx push eax pop ax pop dx call Read_Timer add ax,bx adc dx,0h je loop_final_delay loop_delay_timer: mov cx,bx call Read_Timer cmp bx,cx jnb loop_delay_timer dec dx jne loop_delay_timer loop_final_delay: call Read_Timer cmp bx,ax jb loop_final_delay popad ret Read_Timer: push ax pushf cli xor al,al out 43h,al call Dummy_Ret in al,40h xchg ax,bx call Dummy_Ret in al,40h mov bh,al not bx popf pop ax Dummy_Ret: ret Delay_Mcs endp Ultima modifica di repne scasb : 29-07-2006 alle 12:13. |
|
|
|
|
|
|
#6 |
|
Bannato
Iscritto dal: Feb 2003
Messaggi: 947
|
NOTA: le porte 40h/43h non fanno parte le TRAP_IO di Windows XP.
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:27.



















