PDA

View Full Version : delay assembly Tasm 8086


uscrocc
20-05-2014, 12:29
Ciao ragazzi il mio algoritmo è questo per fare il delay:

Delay macro

Mov di,00d
Ciclodel: cmp di,999h ;di più non posso mettere perchè
je escidel ;mi dice overflow na cosa del genere
Inc di
jmp ciclodel
Escidel:mov di,00d
Ciclodel2: cmp di,999h
Je escidel2
Inc di
Jmp ciclodel2
Escidel2:


Endm

Ragazzi ho provato a fare più cicli ma me lo fa in meno di manco 1 secondo, come se non lo facesse propio.. domani ho compito sui carattere e gestione video. Aiuto

ingframin
20-05-2014, 14:27
Ciao ragazzi il mio algoritmo è questo per fare il delay:

Delay macro

Mov di,00d
Ciclodel: cmp di,999h ;di più non posso mettere perchè
je escidel ;mi dice overflow na cosa del genere
Inc di
jmp ciclodel
Escidel:mov di,00d
Ciclodel2: cmp di,999h
Je escidel2
Inc di
Jmp ciclodel2
Escidel2:


Endm

Ragazzi ho provato a fare più cicli ma me lo fa in meno di manco 1 secondo, come se non lo facesse propio.. domani ho compito sui carattere e gestione video. Aiuto
E' un problema di velocita' del processore.
piu' di 999h ti da' overflow perche' sfori i 16 bit...
Mi sa che il massimo che puoi mettere e' FFFFh.
In ogni caso...
Il tuo problema e' la velocita' del processore che e' troppa.
Devi usare piu' registri per il conteggio.
Inoltre come fai a sapere quanto tempo aspetti?
Non sai quanti cicli prende una singola istruzione...:muro:

uscrocc
20-05-2014, 14:49
E' un problema di velocita' del processore.
piu' di 999h ti da' overflow perche' sfori i 16 bit...
Mi sa che il massimo che puoi mettere e' FFFFh.
In ogni caso...
Il tuo problema e' la velocita' del processore che e' troppa.
Devi usare piu' registri per il conteggio.
Inoltre come fai a sapere quanto tempo aspetti?
Non sai quanti cicli prende una singola istruzione...:muro:

Quindi come devo fare? Devo fare il delay per 2 secondi

ingframin
20-05-2014, 15:21
Quindi come devo fare? Devo fare il delay per 2 secondi

Devi leggere dall'orologio di sistema.
http://www.computing.dcu.ie/~ray/teaching/CA296/notes/8086_bios_and_dos_interrupts.html
C'e' una locazione che ti da' il numero di clock ticks dalla mezzanotte e il numero di clock ticks al secondo.

uscrocc
20-05-2014, 15:31
Devi leggere dall'orologio di sistema.
http://www.computing.dcu.ie/~ray/teaching/CA296/notes/8086_bios_and_dos_interrupts.html
C'e' una locazione che ti da' il numero di clock ticks dalla mezzanotte e il numero di clock ticks al secondo.

;disegnare le assi cartesiane: nel primo quadradrante quadrato vuoto, nel secondo pieno,
;nel terzo vuoto, nel quarto pieno. quadrato 30x30 pixel
include macro.lib
.model small
.stack 100h
.code
mov ax,@data
mov ds,ax

mov al,18d;il modo di risoluzione in questo caso 640x480
mov ah,00h
int 10h

mov al,3
mov bh,00h
mov cx,320
mov dx,240
mov ah,0ch
int 10h

mov ah,4ch
int 21h
end

sto facendo questo programma con la grafica, arrivato a vede se le prime istruzioni funzionano, però mi fa errore:

http://postimg.org/image/aela9nljt/

metto ignora e poi mi da mtvd.exe na cosa del genere arrestato.

Poi per quanto riguarda i numeri di clock che fa non ho trovato niente, ho trovato solo questo:

INT 1Ah / AH = 00h - get system time.
return:
CX : DX = number of clock ticks since midnight.
AL = midnight counter, advanced each time midnight passes.
notes:
there are approximately 18.20648 clock ticks per second,
and 1800B0h per 24 hours.
AL is not set by the emulator. Back to Top