Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: danielo- en 29 Octubre 2010, 04:49 am



Título: Crear un delay en asm
Publicado por: danielo- en 29 Octubre 2010, 04:49 am
Hola a todos, estoy tratando de hacer un pequeño retardo de unos segundos (de 5 a 10 ) en ensamblador, y lo intente haciendo un ciclo, pero resulta que el retardo es muy pequeño, alguien sabe como hacerlo que tarde 5 o más segundos?...
Aqui les dejo el codigo.

Código
  1. pila segment stack "STACK"
  2. pila ends
  3.  
  4. data segment
  5. data ends
  6.  
  7. code segment
  8.  
  9. assume cs:code,ds:data,ss:pila
  10. inicio:
  11. mov dl,01010000b ; para imprimir 1
  12. mov ah,02h ;para imprimir 1
  13. int 21h ;para imprimir 1
  14.  
  15. ;uno:
  16. ;cmp dl,57
  17. ;ja sub dl 1
  18.  
  19. mov  bx, 65000
  20. cinco:
  21. cmp bx, -65000
  22. ja uno
  23. jna dos
  24.  
  25. ;mov dl,00010000b ; para imprimir 1
  26. ;mov ah,02h ;para imprimir 1
  27. ;int 21h
  28. uno:
  29. ;mov dl,10000000b ; para imprimir 1
  30. sub  bx,1
  31. mov dl, 'a' ; para imprimir 1
  32. mov ah,02h ;para imprimir 1
  33. int 21h
  34. jmp cinco
  35.  
  36. dos:
  37. mov dl, 'b' ; para imprimir 1
  38. mov ah,02h ;para imprimir 1
  39. int 21h
  40.  
  41.  
  42. MOV AX, 4C00h  ;halt    dos dice que es la terminacion del programa
  43. INT 21h  ;;int rebisa lo que esta en 21h.
  44.                 ;es la interrupcion de pantalla con la funcion 4c que es la de hald
  45.  
  46. code ends
  47.  
  48. end inicio
  49.  


Título: Re: Crear un delay en asm
Publicado por: Eternal Idol en 29 Octubre 2010, 20:39 pm
Del libro "Ensamblador para DOS, Linux y Windows":

Código
  1. ;----------------------------
  2. ; Procedimiento que provoca
  3. ; una espera de N segundos
  4. ;
  5. ; Espera recibir en CX el
  6. ; número de segundos
  7. ;----------------------------
  8. Espera:
  9.         pusha ; guardar registros
  10.  
  11.         ; obtenemos el número
  12.         ; de minutos y segundos que
  13.         ; indica el reloj ahora        
  14.         call SegundosActual
  15.         ; lo movemos a BX
  16.         mov ax, bx
  17.         ; y le sumamos los segundos
  18.         ; a esperar
  19.         add ax, cx
  20.  
  21. Bucle1:
  22.         ; vigilamos los minutos y
  23.         ; segundos del reloj
  24.         call SegundosActual
  25.         ; viendo si ya se ha completado
  26.         ; la espera
  27.         cmp ax, bx
  28.         ; volviendo al bucle
  29.         ; de no ser así
  30.         ja Bucle1
  31.  
  32.         popa ; recuperamos registros
  33.         ret ; y volvemos
  34.  
  35. ;----------------------------
  36. ; Procedimiento que obtiene
  37. ; los minutos y segundos del
  38. ; reloj, los convierte a
  39. ; segundos y devuelve en BX
  40. ;----------------------------
  41. SegundosActual:
  42.         push ax ; guardamos AX
  43.  
  44.         ; queremos leer los minutos
  45.         mov al, 2
  46.         out 70h, al
  47.         in al, 71h
  48.  
  49.         ; los multiplicamos por 60
  50.         mov bl, 60
  51.         mul bl
  52.  
  53.         ; y guardamos en BX
  54.         mov bx, ax
  55.  
  56.         ; queremos leer los segundos
  57.         xor al, al
  58.         out 70h, al
  59.         in al, 71h
  60.  
  61.         ; los sumamos
  62.         xor ah, ah
  63.         add bx, ax
  64.  
  65.         pop ax ; y volvemos
  66.         ret


Título: Re: Crear un delay en asm
Publicado por: danielo- en 1 Noviembre 2010, 16:21 pm
 :D
mi formar de hacerlo fue la siguiente:

Código
  1. init5:
  2. mov ah,2ch  ;dh=segundos
  3. int 21h
  4.  
  5. mov bh, dh ;bh=segundos
  6. add dh, 3  ; esto para modificar los segundos
  7. mov bl, dh ;bl=segundos +5
  8.  
  9. cmp bl,60
  10. ja mayor
  11. jmp cinco
  12.  
  13. cinco:
  14. cmp bl, bh
  15. jne uno
  16. jmp losdos
  17.  
  18. uno:
  19. mov ah,2ch
  20. int 21h
  21. mov bh, dh ;aora bh=segundos
  22. jmp cinco
  23. mayor:
  24. sub bl,60
  25. jmp cinco
  26.  
  27.  

conste que se poco de ensamblador jeje


Título: Re: Crear un delay en asm
Publicado por: Yurix en 21 Diciembre 2010, 20:31 pm
Puedes tambien llamar a la funcion
Sleep
De Win32 y pasarle la cantidad de Milisegundos que quieres dormir..

Dulces sueños...

Saludos