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
			
			
				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
			
			
			
				 :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
			
			
			
				Puedes tambien llamar a la funcion 
Sleep 
De Win32 y pasarle la cantidad de Milisegundos que quieres dormir..
Dulces sueños...
Saludos