Comment définir 1 seconde de temps de retard à l'assembleur 8086

Mon problème est que j'ai écrit un code qui est censé sortie un résultat dans un ensemble de Led connectée au port parallèle. Quand j'ai couru le code il n'a rien fait. Mon instructeur m'a dit que le code a couru trop vite, que mes yeux ne voient pas ce qui s'est passé.

J'ai trouvé qu'il y a un couple de façons de le faire une heure de retard, j'ai essayé de la boucle de la NOP, mais je pense que je ne peut pas vraiment déterminer ce qui se passe. Est-il un meilleur moyen?

J'ai ici une partie du code où j'ai du ajouter un temps de retard dans:

org 100h

mov ax, 0
mov dx, 378
out dx, ax
mov ax, 1  

; 1st

mov cx, 1ah
start1st:
mov ax, 1
left:
out dx, ax 
; --------------------------------> how to loop?
mov bx, 2
mul bx
cmp ax, 80h
jl left
dec cx
cmp cx,0
jg start1st
; end 1st 
  • Cela nécessite généralement un système d'exploitation ou du BIOS appel, ou en sachant que le PROCESSEUR fréquence d'horloge et très soigneusement la construction d'une boucle de retard pour le bon nombre de cycles (et en supposant que la fréquence de l'horloge ne change pas). Quel système d'exploitation êtes-vous de faire cela?
  • La meilleure façon, si vous avez le matériel, est d'utiliser un dédié minuterie pour faire le calendrier. Il informe ensuite le CPU par une interruption lorsque le délai a expiré. Cela permet au PROCESSEUR de faire d'autres travaux pendant l'attente, qui est souvent très agréable.
  • Jim Mischel Bonjour, je suis à l'aide d'un windows xp dans l'exécution du code. Bâtiment le code a été sur un 8086 émulateur. Sera le NOP boucle être capable de faire cela? Je suis la planification d'une boucle à un certain moment, mais je ne sais pas combien de cycles de chaque instruction est fait. Je n'ai aucune idée à ce sujet.
  • Pourquoi tu fais ça en mode DOS à la première place? Votre émulé en mode réel DOS ne vous donnera pas de meilleur moment que l'hôte du système Windows.
  • Parce que certaines écoles n'ont pas mis à jour leurs cours dans les 20 dernières années. Ils enseignent encore 16 bits assemblée pour MS-DOS. Ils ont aussi probablement utiliser Ford modèle T de pour leur des cours de conduite.
  • ils devraient dump cette merde maintenant. Sur 32 bits, il est trivial Sleep() de l'appel. Ancien de la foutaise..

InformationsquelleAutor Jer Yango | 2013-03-04