Forum: Offtopic Assembler Unterprogramm Aufgaben: ich brauche dringend Hilfe.


von An N. (tada)


Lesenswert?

Moin moin zusammen,
ich brauche dringend eure Hilfe zur Lösung dieser Aufgaben huhu.
Und ich weiß, "du solltest aber selbst lernen/schreiben, nicht 
kopieren." Aber das ist jetzt tot oder lebendig. Also ich bin sehr sehr 
dankbar für jede Hilfe. Danke euch und sorry wenn es stört.



AUFGABE 1:
Schreiben Sie ein Assembler-Unterprogramm zur Umwandlung eines 
ASCII-Zeichens in einen Binärwert.
- Die Adresse des ASCII-Zeichens steht beim Aufruf des Unterprogramms im 
X-Register.
- Ist der Wert des ASCII-Zeichens im Bereich 0x30 bis 0x39 wird der 
entsprechende Ziffernwert (0 bis 9) als Binärwert beim Rücksprung im 
AkkuA übergeben.
- Sonst (Fehlerfall) wird im AkkuA der Wert 0xFF übergeben.



AUFGABE 2:
Schreiben Sie ein Assembler-Unterprogramm zum Bilden des Betrags einer 
1-Byte-Zahl, die im Zweierkomplement gegeben ist.
- Aufruf des Unterprogramm mit JSR BETRAG
- Übergabe der Adresse der 1-Byte-Zahl im X-Register, Rückgabe des 
Ergebnisses im Akku A.



AUFGABE 3:
Schreiben Sie ein Subroutine in Assembler, die ein Paritätsbit (Even 
parity) an Position b7 im Akku A generiert (Even Parity bedeutet, dass 
die Summer der Datenbits + Paritybits gerade ist).
- Bei Aufruf der Subroutine steht das Datenwort (7 Bits, b6...b0) 
rechtsbündig im Akku A, b7 ist unbestimmt.
- Beim Verlassen der Subroutine soll zusätzlich zum Datenwort b7 im Akku 
als Paritätsbit generiert sein.



AUFGABE 4:
Schreiben Sie ein Assembler-Unterprogramm BlkAnz, das die Anzahl der 
Blankzeichen (0x20) in einen max. 200 Zeichen langen String zählt. Die 
Adresse der ersten Stringzeichens steht im X-Register, der String ist 
mit 0x00 terminiert. Die Anzahl der Blankzeichen soll in die Zeile vor 
dem ersten Stringzeichen geschrieben werden.



AUFGABE 5:
Zur Abfrage eines Tasters soll ein Unterprogramm (InTaste) in Assembler 
geschrieben werden.
- Der Taster liegt an PA0 (Bit= von PortA, Input). Ist der Taster 
gedrückt so ist PA0 = 1, bei nicht gedrücktem Taster ist PA0 = 0.
- Zur sicheren Abfrage soll der Taster zweimal im Abstand von ca. 15ms 
abgefragt werden.
- Der Rückgabewert im AkkuA soll sein:
   + 0x01, wenn bei beiden Tasterabfragen der Taster gedrückt war.
   + 0x00, wenn bei beiden Tasterabfragen der Taster nicht gedrückt war.
   + 0xFF, wenn bei beiden Tasterabfragen unterschiedliche Ergebisse 
lieferten.
- Verwenden Sie für die Wartezeit den Timer. Der Timer-Prescaler ist so 
gesetzt, dass ein "Timer-Rick" 0.5μs entspricht.
- Folgende Initialisierung ist bereits gefolgt:

PORTA = 0x0000                 ; Adresse PortA
TCNT  = 0x0044                 ; Timer Counter
TC0   = 0x0050                 ; Timer Compare Register 0
TFLG1 = 0x004E                 ; Timer Interrupt Flag Register,
                                      von TC0: C0F = Bit0
TSCR1 = 0x0046                 ; Timer System Control Register
TIOS  = 0x0040                 ; Timer Input/Output Select

      MOVB #0b10010000, TSCR1  ; Enable Timer und Easy Quick Mode
      MOVB #0 b0000001, TIOS   ; TC0 ist Output Compare




AUFGABE 6:
Gegeben sei ein Mikrorechnersystem (M68HC12, Taktfrequenz = 8Mhz) mit 
einem bei Adresse 0x3000 angeschlossenem D/A-Umsetzer (8 bit, Ua= 
10mv/LSB). Eine Ausgabe an Adresse 0x3000 erzeugt direkt eine 
entsprechende DAU-Ausgangsspannung.
a) Entwickeln Sie ein Programm ab dem Label LOOP (Endlosschleife), das 
die Werte in der Funktionstablle "FTAB" nacheinander über "DAUOUT" 
ausgibt.
b) Zeichnen Sie die dabei entstehende periodische Funktion Ua(t)
c) Welche Frequenz hat Ua(t)?

DAUOUT         = 0x3000             ; Output Register

          .AREA  MEMORY (ABS)
          .ORG   0x4000
FTAB:     .DB    30, 70, 100        ; Alle Werte Dezimal
          .DB    80, 50, 80
          .DB    100, 70, 30
ENDTAB:   .DB    0

START:    LDS    #0x1000            ; Programm-Start hier
          JSR    SetUp              ; System SetUp

LOOP:     ....   ............       ; Bei Label "LOOP": T(diagramm) = 0
          ....   ............
          ....   ............
          ....   ............
          ....   ............
          ....   ............
          ....   ............
          ....   ............
          ....   ............       ; Ende Programmschleife

von An N. (tada)


Lesenswert?

Come on guys, ich weiß, dass es doch blöd aussieht :D
Aber lass mich sein. Ich bin jetzt verzweifelt...
Könnte ihr mir helfen? 1,2 Aufgaben wären schon große Hilfe.

von Max H. (hartl192)


Lesenswert?

Anh Nguyen schrieb:
> Könnte ihr mir helfen? 1,2 Aufgaben wären schon große Hilfe.
Ich kenne diesen Assembler nicht, ich kann dir aber ein paar Denkanstöße 
geben.
1
1) BIN = @X - 0x30
2
   wenn BIN < 0 (MSb gesetzt)
3
   {
4
     Akku = 0xFF
5
     return
6
   }
7
   wenn (BIN - 10) >= 0 (MSb null)
8
   {
9
     Akku = 0xFF
10
     return
11
   }
12
   sonst
13
   {
14
     Akku = BIN
15
     return
16
   }
17
18
19
2) Akku = @X
20
   wenn Akku > 0 (MSb gesetzt)     
21
   {                                
22
     Akku = Akku XOR 0xFF           Zweierkomplement bilden, vllt gibts
23
     Akku = Akku + 1                dafür auch einen ASM Befehl
24
     return
25
   }
26
   sonst
27
   {
28
     return
29
   }

von Michael L. (Gast)


Lesenswert?

Hochschule München ?! Oder arbeitet sonst noch wer mit diesen 
Dinosaurier-Controllern ?

von Günter Lenz (Gast)


Lesenswert?

Anh Nguyen schrieb:
>Umwandlung eines
>ASCII-Zeichens in einen Binärwert.

Das ist ganz einfach.
Schau mal in die ASCII-Tabelle, dort siehst du
das die Zahlenzeichen  0 bis 9  bei Hex 30 bis Hex 39 liegen.
Du brauchst also nur Hex 30 subtrahieren. Zum Beispiel:
Hex 39 - Hex 30 = Hex 09

von S. R. (svenska)


Lesenswert?

Anh Nguyen schrieb:
> ich brauche dringend eure Hilfe zur Lösung dieser Aufgaben huhu.
> Und ich weiß, "du solltest aber selbst lernen/schreiben, nicht
> kopieren." Aber das ist jetzt tot oder lebendig.

Tja, zu spät. Ungefähr 3 Wochen zu spät.

Hättest du wenigstens gezeigt, dass du ein Interesse daran hast, die 
Aufgaben lösen zu können, hätte man sich die Zeit nehmen können, dir die 
Hinweise zu geben, die du dafür brauchst. So weiß ich als potentiell 
Helfender, dass meine Zeit garantiert verschwendet ist, denn selbst wenn 
das fertig ist, hast du immernoch nichts gelernt.

von Uwe (Gast)


Lesenswert?

Ohne Worte:

AUFGABE 1:
Schreiben Sie ein Assembler-Unterprogramm zur Umwandlung eines
ASCII-Zeichens in einen Binärwert.
- Die Adresse des ASCII-Zeichens steht beim Aufruf des Unterprogramms im
X-Register.
- Ist der Wert des ASCII-Zeichens im Bereich 0x30 bis 0x39 wird der
entsprechende Ziffernwert (0 bis 9) als Binärwert beim Rücksprung im
AkkuA übergeben.
- Sonst (Fehlerfall) wird im AkkuA der Wert 0xFF übergeben.

Value:    ldaa  0,x
          suba  #$30
          bmi   _FF
          cmpa  #10
          bcc   FF
          bra   EndVal:
_FF:      ldaa  #$FF
EndVal:   ret
_____________________________________________________________
AUFGABE 4:
Schreiben Sie ein Assembler-Unterprogramm BlkAnz, das die Anzahl der
Blankzeichen (0x20) in einen max. 200 Zeichen langen String zählt. Die
Adresse der ersten Stringzeichens steht im X-Register, der String ist
mit 0x00 terminiert. Die Anzahl der Blankzeichen soll in die Zeile vor
dem ersten Stringzeichen geschrieben werden.
BlkAnz:   psha
          pshb
          pshy
          pshx
          puly
          decy
          clrb
LoopBl:   ldaa 0,x+
          tsta
          beq EndLoop
          cmpa #$20
          bne LoopBl
          incb
          bra LoopBl
EndLoop:  stab 0,y
          puly
          pulb
          pula
          ret
___________________________________________________________
A6a:

LOOP      ldy  #0x3000
LOOP1:    ldx  #FTAB
LOOP2:    ldaa 0,x+
          staa 0,y
          tsta
          bne LOOP2
          bra  LOOP1


viel Erfolg, Uwe und sei nicht so stinkend faul

von Martin V. (oldmax)


Lesenswert?

Hi
Ja, Hilfe brauchst du, aber nicht, indem dir deine Aufgaben gelöst 
werden. Ihr habt doch das Thema besprochen, da sollte es ein Leichtes 
sein, mindestens für zwei der Aufgaben eine Lösung zu finden. Wie mir 
scheint, hast du einfach das falsche Fach belegt. Zumal hier ja nun 
wirklich nichts Besonderes erwartet wird. Sieh es mal so, ein Häkelkurs 
oder Sport, Kochen oder sonst was Anderes wär vielleicht eher was, denn 
auch wenn du hier die Lösungen gelieefert bekommst, du lernst es nicht. 
Nicht jetzt und auch nicht später Denn es interessiert dich nicht die 
Bohne. Ein Programmierer wird immer Ehrgeiz entwickeln, eine (eigene) 
Lösung zu finden. Das ist eine Eigenschaft, die mir bei deinem Post 
absolut fehlt. Also, vielleicht findest du noch einen Platz in einem 
anderen Bereich.
Gruß oldmax

von Thomas T. (knibbel)


Lesenswert?

Und auch wenn Du für z.B. zwei Aufgaben (korrekte) Lösungen präsentierst 
und zu dem Rest absolut nichts (oder nur Mist) schreibst, sieht der 
Lehrer/Dozent sofort, dass man Dir geholfen hat und die eigentliche 
Denkleistung nicht von Dir stammt...

Gruß,
Thomas

von Peter D. (peda)


Lesenswert?

Bei Assembler immer zuerst das Target nennen, am besten gleich im 
Topic!

Ich könnte Dir Lösungen in 8051- oder AVR-Assembler schreiben.

von Eric B. (beric)


Lesenswert?

Michael L. schrieb:
> Hochschule München ?! Oder arbeitet sonst noch wer mit diesen
> Dinosaurier-Controllern ?

Äh, ich momentan, beruflich sogar (MC9HS12G).

Und nein, ich bin nicht an der Hochschule. Dieser uC ist noch beliebt im 
Automotive-Umfeld für kleinere Steuergeräte wo es nicht auf hohe 
Rechenleistung ankommt, sondern eher auf der Preis bei hohen Stückzahlen 
und langjährige Verfügbarkeit.

von Michael L. (Gast)


Lesenswert?

Eric B. schrieb:
> Michael L. schrieb:
>> Hochschule München ?! Oder arbeitet sonst noch wer mit diesen
>> Dinosaurier-Controllern ?
>
> Äh, ich momentan, beruflich sogar (MC9HS12G).
>
> Und nein, ich bin nicht an der Hochschule.

Hm ich könnte schwören, dass ich genau diese Aufgaben vor 10 Jahren dort 
programmiert habe

von PittyJ (Gast)


Lesenswert?

Im Handwerk werden noch Lehrlinge gesucht...
Wenn man merkt, dass man mit Informatik überfordert ist, warum nicht 
wechseln?

von An N. (tada)


Lesenswert?

Vielen Dank danke an alle die mir geholfen haben!


S. R. schrieb:
> Anh Nguyen schrieb:

> Tja, zu spät. Ungefähr 3 Wochen zu spät.
>
> Hättest du wenigstens gezeigt, dass du ein Interesse daran hast, die
> Aufgaben lösen zu können, hätte man sich die Zeit nehmen können, dir die
> Hinweise zu geben, die du dafür brauchst. So weiß ich als potentiell
> Helfender, dass meine Zeit garantiert verschwendet ist, denn selbst wenn
> das fertig ist, hast du immernoch nichts gelernt.

Okay, danke dir.


Martin Vogel schrieb:
> Hi
> Ja, Hilfe brauchst du, aber nicht, indem dir deine Aufgaben gelöst
> werden. Ihr habt doch das Thema besprochen, da sollte es ein Leichtes
> sein, mindestens für zwei der Aufgaben eine Lösung zu finden. Wie mir
> scheint, hast du einfach das falsche Fach belegt. Zumal hier ja nun
> wirklich nichts Besonderes erwartet wird. Sieh es mal so, ein Häkelkurs
> oder Sport, Kochen oder sonst was Anderes wär vielleicht eher was, denn
> auch wenn du hier die Lösungen gelieefert bekommst, du lernst es nicht.
> Nicht jetzt und auch nicht später Denn es interessiert dich nicht die
> Bohne. Ein Programmierer wird immer Ehrgeiz entwickeln, eine (eigene)
> Lösung zu finden. Das ist eine Eigenschaft, die mir bei deinem Post
> absolut fehlt. Also, vielleicht findest du noch einen Platz in einem
> anderen Bereich.
> Gruß oldmax

Ich verstehe und ich weiß alles was du meinst.
Ich bin aber gezwungen Elektrotechnik zu studieren gehen. Wieso, ist 
eine lange Geschichte. Ich wollte jetzt nur so schnell wie möglich das 
Studium abschließen und dem eigenen Weg folgen...

von caravan (Gast)


Lesenswert?

wo studierste?

von Karl H. (kbuchegg)


Lesenswert?

Anh Nguyen schrieb:

> eine lange Geschichte. Ich wollte jetzt nur so schnell wie möglich

"so schnell wie möglich" bedeutet 'du musst rannklotzen'. Mit der 
Betonung auf 'Du'. Denn andere Leute deine Arbeit machen zu lassen 
funktioniert in der Technik nicht. Dampfplauderer, die ausser schwafeln 
selbst nichts können, fliegen da sehr schnell auf.

-> wenn du in Minimalzeit fertig werden willst, musst du das Fachgebiet 
beherrschen. Und zwar alle Fachgebiete, die in deinem Studium gefordert 
werden.

von Reinhard S. (rezz)


Lesenswert?

Anh Nguyen schrieb:
> Ich bin aber gezwungen Elektrotechnik zu studieren gehen. Wieso, ist
> eine lange Geschichte.

Hahaha. Mein Beileid. Wie alt bist du?

Grüße vom Facharbeiter mit freien Willen.

von An N. (tada)


Lesenswert?

Karl Heinz schrieb:
> Anh Nguyen schrieb:
>
>> eine lange Geschichte. Ich wollte jetzt nur so schnell wie möglich
>
> "so schnell wie möglich" bedeutet 'du musst rannklotzen'. Mit der
> Betonung auf 'Du'. Denn andere Leute deine Arbeit machen zu lassen
> funktioniert in der Technik nicht. Dampfplauderer, die ausser schwafeln
> selbst nichts können, fliegen da sehr schnell auf.
>
> -> wenn du in Minimalzeit fertig werden willst, musst du das Fachgebiet
> beherrschen. Und zwar alle Fachgebiete, die in deinem Studium gefordert
> werden.


Ich habe schon einen Job, der gar nicht mit Elektrotechnik zu tun hat. 
Und ich wollte auch nie in diesem Bereich arbeiten, muss aber mein 
Studium fertig machen.
Aber wie gesagt, das ist eine lange Geschichte :)
Sorry.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.