Test Foro de elhacker.net SMF 2.1

Programación => Programación General => 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 (asm) [Seleccionar]

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
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 (asm) [Seleccionar]
;----------------------------
; 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
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 (asm) [Seleccionar]

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
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