Uhrzeit in einem Register in 10 Minuten Schritten - Assembler

OP #5219555
Lesenswert?

Die Uhrzeit ist in einem Register codiert.

Bsp:

0 = 00:00
1 = 00:10
2 = 00:20
3 = 00:30
4 = 00:40
5 = 00:50
6 = 01:00
7 = 01:10
..
..


Frage: Wie kann man die Uhrzeit wieder decodieren?

Bsp: 112 --> 18:40


Mit einer hinterlegten Tabelle ist es kein Problem... geht schnell, 
braucht aber viel Platz.


Bernhard
Angehängte Dateien:
#5219561
Lesenswert?

Und wer nicht multiplizieren oder dividieren will oder kann, der 
erinnert sich an Zeiten, in denen er das selbst auch noch nicht konnte, 
und zählt mit den Fingern. Addiert also so lange 10 unter 
Berücksichtigung des 60-er Überlaufs, bis der Intervallzähler durch ist. 
Das braucht sehr wenig Platz, dafür etwas Zeit.
Gast #5219686
Lesenswert?

> In Assembler ist 112 / 6 nicht ganz einfach

In Anlehnung an A.K.s Beitrag: solange 6 von 112 abziehen, bis ein Carry 
auftritt. Ganz einfach, und die benötigte Zeit ist sicher auch 
tolerierbar.
#5219723
Lesenswert?

@Bernhard
Basisoperationen sollten eigentlich Pipifax sein. Auch wenn sie nicht 
als Einzelbefehl "eingebaut" sind.

Da Du aber ein Geheimnis um den verwendeten Prozessor machst, ist 
konkrete Hilfe nicht möglich. Jeder Chip bzw. jede Serie und vor allem 
jeder Hersteller kocht da sein eigenes Süppchen.

Also: Assembler als Sprache gibt es eigentlich gar nicht.
Gast #5219827
Lesenswert?

.def  temp1        = r20
.def  temp2        = r21

wandeln:
  cpi    temp1,143+1
  brcs   okay
   ldi   temp1,24    ; Fehler
   ldi   temp2,0
 ret
okay:
  mov    temp2,temp1
  ldi    temp1,0
loop:
   inc   temp1
   subi  temp2,6
  brcc   loop
  subi   temp2,-6    ; ein Schritt zu weit, zurueck
  dec    temp1
  mov    r0,temp2
  ldi    temp2,10
  mul    r0,temp2
  mov    temp2,r0
 ret

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren