elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Crear un delay en asm
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Crear un delay en asm  (Leído 18,432 veces)
danielo-

Desconectado Desconectado

Mensajes: 218


:)


Ver Perfil
Crear un delay en asm
« 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.  


En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Crear un delay en asm
« Respuesta #1 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


En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
danielo-

Desconectado Desconectado

Mensajes: 218


:)


Ver Perfil
Re: Crear un delay en asm
« Respuesta #2 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
En línea

Yurix

Desconectado Desconectado

Mensajes: 72


Paz para la guerra y guerra por la paz


Ver Perfil
Re: Crear un delay en asm
« Respuesta #3 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
« Última modificación: 21 Diciembre 2010, 23:13 pm por Eternal Idol » En línea



http://kapetres.wordpress.com/ < Mi blog sobre ASM

Parece que alguien no quiere que la info sea liebre >

Alguien lo movio a ese lugar.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Delay para Gundbound....
Juegos y Consolas
zhandra 7 3,401 Último mensaje 14 Noviembre 2004, 10:57 am
por Darks3rver
Necesito delay....
Electrónica
ijfa 0 1,953 Último mensaje 6 Enero 2006, 15:57 pm
por ijfa
delay
PHP
securedigital 3 2,432 Último mensaje 7 Junio 2007, 06:12 am
por Crack_X
Retardos (delay) ignorados
Electrónica
...DaNiEl... 0 2,599 Último mensaje 5 Marzo 2010, 01:28 am
por ...DaNiEl...
Ayuda con delay entre letras
Programación C/C++
defalt_ 4 3,477 Último mensaje 6 Noviembre 2017, 20:26 pm
por defalt_
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines