FB18 - Das Forum für Informatik

fb18.de / Diplom Informatik / Unterbereich Grundstudium / Technische Informatik

T3 Aufgabenblatt 6

T3 Aufgabenblatt 6 2002-12-01 19:49
Fred
So, hier der offizielle Thread zum Aufgabenblatt 6 [img]http://www.sternenvolk.de/symb/7.gif[/img]
Man muss es zwar nicht abgeben, aber vielleicht bearbeitet Ihr es ja trotzdem und es ergeben sich spannende Diskussionen…

Re: T3 Aufgabenblatt 6 2002-12-01 20:28
Popcorn
LoL. Schon wieder nicht abgeben? Bunte Runde. Ich habe aber erst morgen um 10 Uhr meine Übung. Worum geht es denn dieses Mal?

Re: T3 Aufgabenblatt 6 2002-12-01 21:23
Fred
LoL. Schon wieder nicht abgeben? Bunte Runde.
Versteh ich ehrlich gesagt auch nicht, was das soll.
Ich habe aber erst morgen um 10 Uhr meine Übung. Worum geht es denn dieses Mal?
Es soll eine Funktion in Assembler geschrieben werden, die als Parameter ein Zeichen bekommt, und die Funktion soll auf dem Bildschirm ausgeben, ob es sich um ein

* Steuerzeichen
* nicht sichtbares Zeichen
* Kleinbuchstabe
* Grossbuchstabe
* Ziffer
* sonstiges Zeichen

handelt. Allerdings benutzen wir nicht den ASCII-Code, sondern den EBCDIC-Code, habe ich uebrigens noch nie was von gehoert (der ist aber auf dem Zettel mit abgedruckt).



Re: T3 Aufgabenblatt 6 2002-12-02 00:58
Tzwoenn
Fred will PostMaster werden… [img]http://www.sternenvolk.de/symb/15.gif[/img]

Re: T3 Aufgabenblatt 6 2002-12-02 01:44
Fred
Fred will PostMaster werden… [img]http://www.sternenvolk.de/symb/15.gif[/img]
Noch tausend Posts und ich habe Bjoern eingeholt!


Re: T3 Aufgabenblatt 6 2002-12-04 14:06
Liller
Glueckwunsch Fred:

In unserer Uebungsgruppe wurde deine Loesung zu Blatt 5
vorgestellt, u.a. weil sie so elegant ("if-Teil") war.

Re: T3 Aufgabenblatt 6 2002-12-04 17:51
Fred
Glueckwunsch Fred:

In unserer Uebungsgruppe wurde deine Loesung zu Blatt 5
vorgestellt, u.a. weil sie so elegant ("if-Teil") war.
Herr Polizeipräsident, ich fühle mich geehrt, aber ich mag solche schemelhaften Anbiederungsversuche überhaupt nicht, das wissen Sie ganz genau. Äh, es ist, mit - mit der Blume, das ist nicht, äh, mit der Blume will ich nicht haben…

Trotzdem danke für die Blumen [img]http://www.sternenvolk.de/symb/25.gif[/img]

Es gab nebenbei bemerkt sicher noch mehr Lösungen, die das if wegoptimiert haben, die aber erst am Sonntag abend abgegeben haben.


Re: T3 Aufgabenblatt 6 2002-12-05 16:27
Fred
Es soll eine Funktion in Assembler geschrieben werden, die als Parameter ein Zeichen bekommt, und die Funktion soll auf dem Bildschirm ausgeben, ob es sich um ein

* Steuerzeichen
* nicht sichtbares Zeichen
* Kleinbuchstabe
* Grossbuchstabe
* Ziffer
* sonstiges Zeichen

handelt. Allerdings benutzen wir nicht den ASCII-Code, sondern den EBCDIC-Code, habe ich uebrigens noch nie was von gehoert (der ist aber auf dem Zettel mit abgedruckt).
So, heute ist Freitag, hat irgendjemand von Euch den Kram schon gemacht? [img]http://www.sternenvolk.de/symb/7.gif[/img]


Re: T3 Aufgabenblatt 6 2002-12-05 16:36
Zaphod
Jupp.
Ist aber eigentlich nur Schreibarbeit, und amsonsten muss man darauf achten, dass man ggf. an die richtigen Stellen wieder zurückspringt. Allerdings ist meine wohl nicht die Ideale Lösung, aber.. hauptsache, sie funktioniert [img]http://www.sternenvolk.de/symb/23.gif[/img]

Re: T3 Aufgabenblatt 6 2002-12-05 17:47
TriPhoenix
So, heute ist Freitag, hat irgendjemand von Euch den Kram schon gemacht? [img]http://www.sternenvolk.de/symb/7.gif[/img]

Ebenso jup :)

Wie Zaphod shcon sagt, ne Menge schreibarbeit nach dem Schema vergleichen und branchen, soll angeblich üben sowas :>


Re: T3 Aufgabenblatt 6 2002-12-06 11:41
Slater
debug-tipp:

falls eine .s datei schön compiliert, aber beim ausführen nur
'segmentation fault' (oder so ähnlich) sagt,

dann kann es an der zeile

'.section "text"'

statt

'.section ".text"'

liegen ;),
da kann man durchaus ein paar minütchen suchen..



Re: T3 Aufgabenblatt 6 2002-12-06 15:07
Fred
ne Menge schreibarbeit nach dem Schema vergleichen und branchen
Kleiner Tip: die Aufgabe festzustellen, in welche Kategorie das uebergebene Zeichen faellt, kann man auch als Bereitstellung einer Funktion f(x) verstehen. x ist dabei das Zeichen, f(x) beispielsweise eine Zahl zwischen 0 und 5. Der Definitionsbereich von x ist endlich und auch nicht besonders gross (0-255), warum also muehsam vergleichen, wenn man alle 256 moeglichen f(x) einfach aufzaehlen kann?

Wahrscheinlich haben die meisten bedingte Spruenge verwendet, weil die beim letzten Uebungsgruppentermin so intensiv besprochen wurden - aber auf dem Aufgabenzettel steht von bedingten Spruengen kein Wort!



Re: T3 Aufgabenblatt 6 2002-12-06 15:23
Anonymer User
gute idee. look-up-table und fertig ist der lack.

Re: T3 Aufgabenblatt 6 2002-12-06 15:26
Fred
gute idee. look-up-table und fertig ist der lack.
Knapp und praezise formuliert, ja genau das meinte ich [img]http://www.sternenvolk.de/symb/25.gif[/img]
Damit reduziert sich der Code auf 10 Zeilen.



Re: T3 Aufgabenblatt 6 2002-12-06 15:38
Slater
das klingt durchaus nett,

aber ich hab grad keine vorstellung, wie das in assembler aussieht, diese aufzählungen,
wär nett wenn du da ein beispiel oder eben die 10 zeilen der aufgabe postest [img]http://www.sternenvolk.de/symb/23.gif[/img]

Re: T3 Aufgabenblatt 6 2002-12-06 16:26
Popcorn
Och wie unspannend Slater. Keinen Ehrgeiz das selbst hinzubekommen? Nehm' Dir doch mal Zeit und schiebe den P Kram ein wenig beiseite. ;)

Re: T3 Aufgabenblatt 6 2002-12-06 16:34
Slater
pff,
"wenn jeder mensch beim erfinden des rads anfängt.. usw"

Re: T3 Aufgabenblatt 6 2002-12-06 17:11
Fred
ich hab grad keine vorstellung, wie das in assembler aussieht, diese aufzählungen
Du definierst Dir einfach im Datensegment 256 aufeinanderfolgende Bytes. Diese stehen dann byte-aligned hintereinander im Speicher, ein Array sozusagen. Das erste Byte ist dann f(0), das naechste f(1) und so weiter.

.section ".data"

aufzaehlung: .byte 5, 2, 8, 4, 1, 0, 9, 3, 5, 66, 22, -1, …


Re: T3 Aufgabenblatt 6 2002-12-06 17:22
Slater
schick schick

im sinne von verwendung wär durchaus noch interessant, wie man nun darauf zugreifen kann,
aber du brauchst mir jetzt auch nicht die ganze programmiersprache erklären, das sind ja bisher nicht behandelte konstruktionen,
hast vielleicht stattdessen einen deiner berühmten links? ;)

Re: T3 Aufgabenblatt 6 2002-12-06 17:32
Fred
im sinne von verwendung wär durchaus noch interessant, wie man nun darauf zugreifen kann,
aber du brauchst mir jetzt auch nicht die ganze programmiersprache erklären, das sind ja bisher nicht behandelte konstruktionen,
hast vielleicht stattdessen einen deiner berühmten links? ;)
Ich hab jetzt keinen Bock eine entsprechende Seite zu suchen ;)

Du brauchst einen Zeiger auf das Array. (In Assembler sagt man statt Array auch gerne Tabelle, Look-Up-Table, Vektor… das heisst alles das gleiche.) Diesen Zeiger bekommst Du per sethi/or. Der Zeiger zeigt somit auf das erste Element der Tabelle. Da du aber nicht an dem ersten Element interessiert bist, musst Du noch das Zeichen draufaddieren. Danach zeigt der Zeiger auf das Element in der Tabelle, das dem Zeichen entspricht. Dieses Byte kannst Du Dir per ldub holen und weiterverarbeiten.


Re: T3 Aufgabenblatt 6 2002-12-06 22:53
Faleiro
falls eine .s datei schön compiliert, aber beim ausführen nur 'segmentation fault' (oder so ähnlich) sagt,
…kann es auch an folgendem liegen: das Minus bei save %sp,-112,%sp vergessen :-) Bis ich das gefunden hatte…

Re: T3 Aufgabenblatt 6 2002-12-07 00:50
Fred
[falls eine .s datei schön compiliert, aber beim ausführen nur 'segmentation fault' (oder so ähnlich) sagt] kann es auch an folgendem liegen: das Minus bei save %sp,-112,%sp vergessen
Ist eigentlich allen klar, warum da negative Zahlen hingehoeren? Und warum man keine groesseren Zahlen als -64 verwenden darf?


Re: T3 Aufgabenblatt 6 2002-12-07 01:43
Labskaus
Du mußt hier nicht den Lehrer spielen, du kannst es uns gleich sagen. Ich habe beim Lesen das Gefühl, als würdest du mit mir die T- oder P-Übung machen [img]http://www.sternenvolk.de/symb/7.gif[/img]

Re: T3 Aufgabenblatt 6 2002-12-07 02:19
Fred
Du mußt hier nicht den Lehrer spielen, du kannst es uns gleich sagen. Ich habe beim Lesen das Gefühl, als würdest du mit mir die T- oder P-Übung machen [img]http://www.sternenvolk.de/symb/7.gif[/img]
Eigentlcih war ich nur gerade bissle muede, dass alles zu schreiben, naja und Lehrer spielen macht mir Spass, ich gebs ja zu [img]http://www.sternenvolk.de/symb/7.gif[/img]
Also der Stack waechst von oben nach unten (deswegen negative Zahlen), und die 64 Bytes braucht man zum Retten der lokalen Register und der out-Register, wenn der Prozessor in eine Falle tappt.

NP: Helge Schneider - Tiere



Re: T3 Aufgabenblatt 6 2002-12-07 10:29
Faleiro
Und warum mal -104 und mal -112?

Re: T3 Aufgabenblatt 6 2002-12-07 13:52
Fred
Und warum mal -104 und mal -112?
Das musst Du selbst rausfinden, ich weiss es nicht. Ich vermute mal, der Compiler ist einfach bloede [img]http://www.sternenvolk.de/symb/23.gif[/img]



Re: T3 Aufgabenblatt 6 2002-12-07 14:11
TriPhoenix
Und warum mal -104 und mal -112?
Das musst Du selbst rausfinden, ich weiss es nicht. Ich vermute mal, der Compiler ist einfach bloede [img]http://www.sternenvolk.de/symb/23.gif[/img]

De rlegt da bestimmt irgendwelchen Kram ab [img]http://www.sternenvolk.de/symb/28.gif[/img] Meine Programme sind bisher alle mit -64 glücklich geworden


Re: T3 Aufgabenblatt 6 2002-12-07 22:21
Faleiro
Was heisst hier, der Compiler ist bloede :-) Ihr wisst doch sonst alles, wofuer ist die Zahl ueberhaupt da? Ich habe keine Ahnung, ich hab sie immer einfach abgetippt ;-)

Re: T3 Aufgabenblatt 6 2002-12-07 22:30
Slater
der compiler macht soviel platz, wie er meint zu brauchen, 64 sind plicht, und dann zählt er wahrscheinlich die anzahl der codezeilen oder sonstwas.. [img]http://www.sternenvolk.de/symb/28.gif[/img]

Re: T3 Aufgabenblatt 6 2002-12-08 11:56
Tzwoenn
64 Byte, um die Register / Flags und was die Sparc sonst noch so zu bieten hat zu sichern.

Re: T3 Aufgabenblatt 6 2002-12-08 20:37
Faleiro
Ich dachte, das Fenster wird um einen festen Wert verschoben? Das las ich zumindest aus der schoenen Grafik in dem kleinen T3-Heftchen raus. So dass sich halt immer 8 Register ueberlappen.

Re: T3 Aufgabenblatt 6 2002-12-08 22:10
TriPhoenix
Ich dachte, das Fenster wird um einen festen Wert verschoben? Das las ich zumindest aus der schoenen Grafik in dem kleinen T3-Heftchen raus. So dass sich halt immer 8 Register ueberlappen.

Ja, die Sache mti den 64 Byte auf dem Stack ist ne andere. Stell dir mal vor, mitten im Betrieb tritt ein Interrupt (bei Sparc trap genannt) auf, das Betriebssystem muss iich um eine Ausnahmesituation kümmern, sei es weil das Programm fehlerhaft arbeitet, was in den Speicher eingelagert werden muss oder ein Stück Hardware was will. Dann muss das Betriebssystem einschreiten und da Traps ziemlich oft auftreten können, sollte das auch schnell passieren. Damit das unterbrochene Programm nichts von alledem merkt, speichert der Prozessor schnell alle Register ab, und zwar auf dem Bereich ab %sp bis %sp+64. Deswegen muss dieser Bereich frei bleiben, weil zu jedem Zeitpunkt eine Trap auftreten könnte und die dort liegenden Daten Platt machen kann



Re: T3 Aufgabenblatt 6 2002-12-15 23:52
Slater
wie, kein topic zu blatt 7?

schreib ich mal hier mein stolzes programm hin und hoffe auf übersichtlichere alternativen
.section ".text" .global division division: save %sp, -128, %sp cmp %i1, 0 ! bei divison durch 0 erst mal abbruch ;) ble .exit nop mov %i0, %l0 ! l0 = divident (das 32 bit lange) mov %i1, %l1 ! l1 = divisor (das 16 bit lange) !laenge des divisors berechnen: mov %g0, %l2 ! l2 = laenge des divisors .laengeschleife: srl %l1, 1, %l1 ! divisor nach rechts shifen bis null add %l2, 1, %l2 ! dabei mitzaehlen cmp %l1, 0 bg .laengeschleife nop ! division durchfuehren: mov %i1, %l1 ! l1 = divisor (das 16 bit lange) mov 32, %l3 ! divisor auf laenge des dividenten shiften sub %l3, %l2, %l3 ! (l3 = anzahl der shifte, 32-laenge) sll %l1, %l3, %l1 mov 0, %l4 ! l4 = divisonsergebnis cmp %l2, 16 ! keine Division, wenn Divisor zu gross bge .divisionfertig nop .divisionsschleife: sll %l4, 1, %l4 ! ergebnisregister schieben fuer neue 1 oder 0 xor %l0, %l1, %l3 ! test ob 1 oder 0 bei aktueller div cmp %l3, %l0 ! l3 = Testregister bg .nachxor nop cmp %l3, 0 bl .nachxor nop add %l4, 1, %l4 ! -> 1 bei aktueller div.. xor %l1, %l0, %l0 ! xor anwenden .nachxor: ! -> 0 bei aktueller div.. srl %l1, 1, %l1 ! divisor nach rechts schieben ! divisionsbedingung: cmp %i1, %l1 ! ende wenn divisor ganz rechts ble .divisionsschleife nop .divisionfertig: set fmt, %o0 ! Ausgabe der Parameter mov %i0, %o1 mov %i1, %o2 call printf nop set fmt2, %o0 ! Ausgabe Ergebnis, Rest mov %l4, %o1 mov %l0, %o2 ! Rest ist, was in l0 vom Dividenden ! uebrig blieb.. call printf nop .exit: jmp %i7 +8 restore .section ".rodata" fmt: .asciz "Divident: %d, Divisor: %d\n\n" fmt2: .asciz "Ergebnis der Divison: %d, Rest: %d\n\n"
edit
ach ich seh grad selber, das ich den teil mit der laenge des divisors gar nicht mehr brauch..,
das ich auch immer so früh von der uni nach hause fahren muss ;)




Re: T3 Aufgabenblatt 6 2002-12-16 00:13
Fred
EDIT: argh, eben ne veraltete Version gepostet. Hier die richtige [img]http://www.sternenvolk.de/symb/7.gif[/img]

division:

save %sp, -64, %sp

call no_leading_zeroes
mov %i0, %l0 ! Divident normieren

mov %l0, %l2
mov %l1, %l3

call no_leading_zeroes
mov %i1, %l0 ! Divisor normieren

mov %l0, %l4
mov %l1, %l5

set printf_text, %o0

mov %i0, %o1
mov %i1, %o2
mov %g0, %o3

subcc %l5, %l3, %l6
bl ausgeben
mov %i1, %o4
add %l6, 1, %l6

xorschleife:

cmp %l2, %g0
bpos passt_nicht
sll %o3, 1, %o3 ! Im Ergebnis Platz machen fuer naechste Stelle

or %o3, 1, %o3 ! Im Ergebnis rechts eine 1 vermerken
xor %l2, %l4, %l2 ! "neuer Divident" = alter Divident xor Divisor

passt_nicht:

subcc %l6, 1, %l6 ! Zaehler runterzaehlen
bne,a xorschleife ! und weiterrechnen, falls noch nicht fertig
sll %l2, 1, %l2 ! fuehrende Stelle im Dividenten rausschieben falls weiter

srl %l2, %l5, %o4 ! ansonsten Rest zurueckschieben (rechtsbuendig)

ausgeben:

call printf
nop

ret
restore



no_leading_zeroes:

mov %g0, %l1
cmp %l0, %g0
bneg no_more_zeroes
nop

zeroes_loop:

sll %l0, 1, %l0
cmp %l0, %g0
bpos zeroes_loop
add %l1, 1, %l1

no_more_zeroes:

retl
nop



.section ".data"

printf_text: .asciz "%016x : %016x = %016x, R %016x\n"


Re: T3 Aufgabenblatt 6 2002-12-16 00:25
Slater
ach, da werd ich so müde vom lesen [img]http://www.sternenvolk.de/symb/16.gif[/img],
.
.

gähn
.
.

merk: nie mehr nachts mit t anfangen ;)

gut nacht allerseits

Re: T3 Aufgabenblatt 6 2002-12-16 00:34
Fred
ach, da werd ich so müde vom lesen [img]http://www.sternenvolk.de/symb/16.gif[/img],
.
.

gähn
Ich steig da schon selbst nicht mehr so richtig durch, ist ja auch schon ein paar Tage her, dass wir das geschrieben haben. Dem "gaehn" kann ich mich nur anschliessen [img]http://www.sternenvolk.de/symb/7.gif[/img]