Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Assembler (z80)

Empfohlene Antworten

Veröffentlicht

Hi, ich wollte mal was proggen, aber um die genaue Zeiht rauszubekommen fehlen mir die Informationen, wieviel Takte pro Befehl benötigt werden.

Folgendes Programm:


anfang: LD B, xxH
loop1: LD HL,xxxxH
loop2: Dec HL
JPNZ, loop2
DEC B
JPNZ, loop1
JP, anfang
[/PHP]

ich wollte damit im z80 eine [b]Zeitschleife von 1 Sekunde[/b] erzeugen, daher bei [b]10MHz[/b] z.B. wären das [b]10mio schritte[/b], die benötigt würden

Zu den einzelnen Befehlen habe ich mir nur etwas notiert, was aber nicht unbedingt richtig sein muss:

[PHP]DEC B oder HL braucht 1 Takt ?
LD B, xxH braucht 7 Takte ?
LD HL,xxxxH braucht 10 Takte ?
JPNZ, .... braucht 7 Takte, wenn er nicht springt und
12, wenn er nach .... springt??

Ich brauch dringend ne Hilfestellung, ob die Angaben so richtig sind und wie ich das auf 1Mio schritte hinbekomme.

Danke im voraus

Gruß Stefan

Also ich würde entweder eine Taktzyklenbefehlstabelle für den Z80 irgendwo rauskramen oder die Schleife mit einem Timer-Interrupt starten und unterbrechen lassen (ein Flag abfragen o.ä.). Anstatt die Zahlen runter zu zählen, zähle sie einfach hoch und notiere Dir das Ergebnis während des Interrupts. Genauer wirst Du das wohl kaum hinbekommen.

Falls noch weitere Hardware wie Soundchip, Grafikchip oder anderer IRQs vorhanden sind, verfälschen Dir die während der Laufzeit ohnehin das Ergebnis, weil Speicherzugriffe sich dadurch verzögern können. Also alles an laufender Hardware ausschalten, dann ist das Ergebnis am nahesten am Ziel.

Die Tests & Branches brauchen je nachdem, ob sie verzweigen oder nicht auch noch oftmals unterschiedliche Taktzyklen. Das solltest Du mitberechnen.

Was willst Du eigentlich genau? Die Laufzeit eines bestimmten Befehls so irgendwie feststellen? Hat das ganze einen echten Sinn?

Also ich würde entweder eine Taktzyklenbefehlstabelle für den Z80 irgendwo rauskramen oder die Schleife mit einem Timer-Interrupt starten und unterbrechen lassen (ein Flag abfragen o.ä.).

Ja die Taktzyklenbefehlstabelle:

Z80-CPU - FLAG-Dokumentation

Also ich gehe noch zur Schule, daher hat es keinen wirklichen Sinn^^. Ich sollte nur ein Lauflicht progrmmieren und immer 1 sekunde warten, bevor es sich um eins verschiebt. Aber ich soltle glaube ich etwas runterzählen lassen oder so!

Mich würde dieses Interrupt aber doch noch interessieren ... hab gefunden :

DI Disable Interrupt Interrupt sperren

EI Enable Interrupt Interrupt freigeben

aber keine Ahnugn wie ich das in Assembler umsetzen soll oder wie lang sei unterbrechen??? Hab echt kein Plan davon.

Also wenn ich ein Falg abfrage, muss ich doch erstmal Sachen reinschreiben, oder? aber wenn das dann soviel Sachen sind, dassich 255 Zahlen reinschreiben muss, die der dann abfragt?? dann ists mir zu umständlich. Weil ich brauche doch viele Abfragen, ich weis nciht, was für einen Unterschied das auch zu meinem Zähler machen würde?

Sorry, hab mich vielleicht falsch mit dem "Flag" ausgedrückt: Im Timer-Interrupt könnte man die Counter dann einfach auslesen und wüßte, welche Schleife auf welchem Stand ist. Andererseits könnte man den Timer in der Schleife abfragen, bis eine Sekunde vorbei ist.

naja, ich habs versucht, aber keine ahnugn, wie ich das jetzt programmiert bekomme ...

würde sich jemand bereit erklären es zu machen, wenn ich ein fertiges programm mache ohne die ganzen genauen zählwerte udn meine takt-tabellen einscanne? also es ginge nur um die berechnung, welche zahlen ich in die schleife einsetzen muss?

Würde mir sehr helfen, aber wenn es eh keiner mcht oder kann, spar ich mir die arbeit, da ich zu jemand anderem zum eiscannen muss.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.