elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
25 Mayo 2012, 01:17  


Tema destacado: Deseas probar algunas mejoras a la interfaz del foro? Prueba cake! acerca de

+  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 2,614 veces)
danyelk_6u5

Desconectado Desconectado

Mensajes: 204


... en tiempo de crisis...


Ver Perfil
Crear un delay en asm
« en: 29 Octubre 2010, 04:49 »

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
pila segment stack "STACK"
pila ends
 
data segment
data ends
 
code segment
 
assume cs:code,ds:data,ss:pila
inicio:
mov dl,01010000b ; para imprimir 1
mov ah,02h ;para imprimir 1
int 21h ;para imprimir 1
 
;uno:
;cmp dl,57
;ja sub dl 1
 
mov  bx, 65000
cinco:
cmp bx, -65000
ja uno
jna dos
 
;mov dl,00010000b ; para imprimir 1
;mov ah,02h ;para imprimir 1
;int 21h
uno:
;mov dl,10000000b ; para imprimir 1
sub  bx,1
mov dl, 'a' ; para imprimir 1
mov ah,02h ;para imprimir 1
int 21h
jmp cinco
 
dos:
mov dl, 'b' ; para imprimir 1
mov ah,02h ;para imprimir 1
int 21h
 
 
MOV AX, 4C00h  ;halt    dos dice que es la terminacion del programa
INT 21h  ;;int rebisa lo que esta en 21h.
                ;es la interrupcion de pantalla con la funcion 4c que es la de hald
 
code ends
 
end inicio
 


En línea
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.388


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: Crear un delay en asm
« Respuesta #1 en: 29 Octubre 2010, 20:39 »

Del libro "Ensamblador para DOS, Linux y Windows":

Código
;----------------------------
; Procedimiento que provoca
; una espera de N segundos
;
; Espera recibir en CX el
; número de segundos
;----------------------------
Espera:
        pusha ; guardar registros
 
        ; obtenemos el número
        ; de minutos y segundos que
        ; indica el reloj ahora        
        call SegundosActual
        ; lo movemos a BX
        mov ax, bx
        ; y le sumamos los segundos
        ; a esperar
        add ax, cx
 
Bucle1:
        ; vigilamos los minutos y
        ; segundos del reloj
        call SegundosActual
        ; viendo si ya se ha completado
        ; la espera
        cmp ax, bx
        ; volviendo al bucle
        ; de no ser así
        ja Bucle1
 
        popa ; recuperamos registros
        ret ; y volvemos
 
;----------------------------
; Procedimiento que obtiene
; los minutos y segundos del
; reloj, los convierte a
; segundos y devuelve en BX
;----------------------------
SegundosActual:
        push ax ; guardamos AX
 
        ; queremos leer los minutos
        mov al, 2
        out 70h, al
        in al, 71h
 
        ; los multiplicamos por 60
        mov bl, 60
        mul bl
 
        ; y guardamos en BX
        mov bx, ax
 
        ; queremos leer los segundos
        xor al, al
        out 70h, al
        in al, 71h
 
        ; los sumamos
        xor ah, ah
        add bx, ax
 
        pop ax ; y volvemos
        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
danyelk_6u5

Desconectado Desconectado

Mensajes: 204


... en tiempo de crisis...


Ver Perfil
Re: Crear un delay en asm
« Respuesta #2 en: 1 Noviembre 2010, 16:21 »

 :D
mi formar de hacerlo fue la siguiente:

Código
init5:
mov ah,2ch  ;dh=segundos
int 21h
 
mov bh, dh ;bh=segundos
add dh, 3  ; esto para modificar los segundos
mov bl, dh ;bl=segundos +5
 
cmp bl,60
ja mayor
jmp cinco
 
cinco:
cmp bl, bh
jne uno
jmp losdos
 
uno:
mov ah,2ch
int 21h
mov bh, dh ;aora bh=segundos
jmp cinco
mayor:
sub bl,60
jmp cinco
 
 

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 »

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 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 1,817 Último mensaje 14 Noviembre 2004, 10:57
por Darks3rver
Necesito delay....
Electrónica
ijfa 0 403 Último mensaje 6 Enero 2006, 15:57
por ijfa
funcion delay en borland c++
Programación C/C++
kokun_72 1 9,867 Último mensaje 9 Enero 2006, 14:32
por Pseudoroot
Delay Pools
GNU/Linux
Maggie283 1 858 Último mensaje 11 Abril 2006, 21:34
por thehiphapper
delay
PHP
securedigital 3 710 Último mensaje 7 Junio 2007, 06:12
por Crack_X
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines