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. 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": ;---------------------------- ; 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: 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
|