FB18 - Das Forum für Informatik

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

T3 Uebungsblatt 2 Assembler Quelltext

T3 Uebungsblatt 2 Assembler Quelltext 2002-11-03 13:21
Fred
Moin!

Fuer alle, die den Kram von zu Hause aus auf nem intel Rechner kommentieren wollen hier der Quelltext. Die Labels stimmen nicht mit denen auf dem Uebugngszettel ueberein, der zu kommentierende Teil liegt zwischen L90 und L95.

.section ".text",#alloc,#execinstr .align 8 .skip 16 ! block 0 .global unter .type unter,2 unter: save %sp,-104,%sp ! block 1 .L90: ! File quadrat.c: ! 1 /* quadrat.c */ ! 2 ! 3 #include ! 4 ! 5 void unter() ! 6 { ! 7 int b = 5; mov 5,%i5 ! 8 for (;b>0;--b) cmp %i5,0 ble .L94 nop ! block 2 .L_y0: sethi %hi(.L96),%l1 or %l1,%lo(.L96),%l1 .L95: .L92: ! 9 { ! 10 printf("Quadrat: %d\n", b*b); smul %i5,%i5,%o1 call printf mov %l1,%o0 sub %i5,1,%i5 cmp %i5,0 bg .L92 nop ! block 3 .L97: .L94: .L89: jmp %i7+8 restore .size unter,(.-unter) .align 8 .align 8 .skip 16 ! block 0 .global main .type main,2 main: save %sp,-104,%sp ! block 1 .L101: ! File quadrat.c: ! 11 } ! 12 } ! 13 ! 14 int main() ! 15 { ! 16 unter(); call unter nop ! 17 return 0; mov %g0,%i0 jmp %i7+8 restore ! block 2 .L100: jmp %i7+8 restore .size main,(.-main) .align 8 .section ".rodata1",#alloc .align 4 .L96: .ascii "Quadrat: %d\n\000" .type .L96,#object .size .L96,13 .section ".bss",#alloc,#write Bbss.bss: .skip 0 .type Bbss.bss,#object .size Bbss.bss,0 .section ".data",#alloc,#write Ddata.data: .skip 0 .type Ddata.data,#object .size Ddata.data,0 .section ".rodata",#alloc Drodata.rodata: .skip 0 .type Drodata.rodata,#object .size Drodata.rodata,0 .file "quadrat.c" .xstabs ".stab.index","V=6.0 ; DBG_GEN=3.4.5 ; Xa ; R=Sun WorkShop 6 update 2 C 5.3 Patch 111679-03 2001/09/29",60,0,0,1036406994 .xstabs ".stab.index","/home/j2001/1winkler/t3; /opt/SUNWspro/bin/../WS6U2/bin/cc -S quadrat.c",52,0,0,0 .xstabs ".stab.index","main",42,0,0,0 .ident "@(#)stdio.h 1.78 99/12/08 SMI" .ident "@(#)stdio_iso.h 1.2 99/10/25 SMI" .ident "@(#)feature_tests.h 1.18 99/07/26 SMI" .ident "@(#)isa_defs.h 1.20 99/05/04 SMI" .ident "@(#)va_list.h 1.12 99/05/04 SMI" .ident "@(#)stdio_tag.h 1.3 98/04/20 SMI" .ident "@(#)stdio_impl.h 1.8 99/06/10 SMI" .ident "acomp: Sun WorkShop 6 update 2 C 5.3 Patch 111679-03 2001/09/29" .global __fsr_init_value __fsr_init_value = 0x0


Re: T3 Uebungsblatt 2 Assembler Quelltext 2002-11-03 16:19
Slater
zitat Fred:
Zuerst mal ne Beschwerde - ist bei Euch das Fenster auch
zu Breit? Muss immer nach rechts und links scrollen zum
lesen…
[img]http://www.sternenvolk.de/symb/20.gif[/img]
das liegt an den langen zeilen im code, die du hier auch
selber möglichst vermeiden solltest, ganz einfach paar mal
return drücken, danke [img]http://www.sternenvolk.de/symb/23.gif[/img]

Re: T3 Uebungsblatt 2 Assembler Quelltext 2002-11-03 17:13
Popcorn
Wenn man auf benutzt ist das ein Easy-HTML Tag der später ins Pre-Tag umgewandelt wird. Auch wenn es bei langen Texten nicht schön aussieht, ist das alles so wie es sein soll. Das lässt sich bei HTML leider nicht vermeiden. Slater hat schon recht: Die einzige (hier machbare) Lösung ist eine Konvention für 60-Zeichen-Zeilen.

Re: T3 Uebungsblatt 2 Assembler Quelltext 2002-11-03 18:50
Zaphod
..oder eine Auflösung von 1600 x 1200 [img]http://www.sternenvolk.de/symb/15.gif[/img]

Re: T3 Uebungsblatt 2 Assembler Quelltext 2002-11-03 20:08
Faleiro
Scheint am Browser zu liegen? Ich bekomme das Problem nur, wenn ich das Fenster horizontal so extrem zusammenstauche, dass es sowieso nicht mehr gut lesbar waere…

Re: T3 Uebungsblatt 2 Assembler Quelltext 2002-11-03 20:13
MoKrates
Gut, dass Zaphod Beeblebrox zwar Praesident war, aber, und das ist jetzt wichtig, keinerlei Entscheidungsgewalt hatte!

MoKrates

Re: T3 Uebungsblatt 2 Assembler Quelltext 2002-11-03 20:29
Slater
Scheint am Browser zu liegen? Ich bekomme das Problem nur, wenn ich das Fenster horizontal so extrem zusammenstauche, dass es sowieso nicht mehr gut lesbar waere…

wenn du damit die 800x600 auflösung umschreibst… ;))

Re: T3 Uebungsblatt 2 Assembler Quelltext 2002-11-03 20:35
Faleiro
Nee, ich habe durchaus ein Herz fuer die technisch minderbemittelten ;-) , das habe ich in einem anderen Thread (Internet-Anbindungen) recht deutlich gemacht ;-)

Ernsthaft, ich verwende Mozilla 1.0 und bis ein horiz. Scrollbalken erscheint, muss die Breite des Fensters ca. 250 Pixel sein…

Re: T3 Uebungsblatt 2 Assembler Quelltext 2002-11-03 20:42
Zaphod
Gut, dass Zaphod Beeblebrox zwar Praesident war, aber, und das ist jetzt wichtig, keinerlei Entscheidungsgewalt hatte!
Sag Papa Moll mal, dass in seiner Erziehung seines ältesten Sohnes was schief gelaufen ist. frech ist der geworden… [img]http://www.sternenvolk.de/symb/15.gif[/img]

Re: T3 Uebungsblatt 2 Assembler Quelltext 2002-11-03 23:15
MoKrates
Molle, wenn ich bitten darf!

MoKrates

Re: T3 Uebungsblatt 2 Assembler Quelltext 2002-11-04 08:16
Zaphod
Erläuterung: Bei deinem Vater gab es früher immer diese kleinen Heftchen kostenlos mitzunehmen, und ganz in der Mitte gab es immer eine kleine Geschichte über Familie Moll [img]http://www.sternenvolk.de/symb/25.gif[/img].

Re: T3 Uebungsblatt 2 Assembler Quelltext 2002-11-04 14:21
MoKrates
Wer sollte das besser wissen als ich?…

MoKrates

Re: T3 Uebungsblatt 2 Assembler Quelltext 2002-11-04 16:45
Zaphod
..na, der Mockingbird himself..?

Re: T3 Uebungsblatt 2 Assembler Quelltext 2002-11-04 17:02
MoKrates
[img]http://www.sternenvolk.de/symb/15.gif[/img]

MoKrates

Re: T3 Uebungsblatt 2 Assembler Quelltext 2002-11-10 21:00
Slater
… der zu kommentierende Teil liegt zwischen L90 und L95.

.section ".text",#alloc,#execinstr .align 8 .skip 16 ! block 0 .global unter .type unter,2 unter: save %sp,-104,%sp ! block 1 .L90: ! File quadrat.c: ! 1 /* quadrat.c */ ! 2 ! 3 #include <stdio.h> ! 4 ! 5 void unter() ! 6 { ! 7 int b = 5; mov 5,%i5 ! 8 for (;b>0;--b) cmp %i5,0 ble .L94 nop ! block 2 .L_y0: sethi %hi(.L96),%l1 or %l1,%lo(.L96),%l1 .L95: .L92: ! 9 { ! 10 printf("Quadrat: %d\n", b*b); smul %i5,%i5,%o1 call printf mov %l1,%o0 sub %i5,1,%i5 cmp %i5,0 bg .L92 nop ! block 3 .L97: .L94: .L89: jmp %i7+8 restore […]
dazu noch
.L96: .ascii "Quadrat: %d\n\000" .type .L96,#object .size .L96,13

geht die funktion under() nicht ungefähr bis hier?,
und wer hat noch lust, schnell ein paar sätze zu schreiben, was die befehle so bedeuten und wie der programmablauf ist?,

wenns leicht ist, machts auch keine grosse mühe was hinzuschrieben,
wenn bisschen trickyger (nettes wort) dann ist beschreibung umso sinnvoller! ;),

ich such jetzt mal eben die bedeutungen der befehle..



Re: T3 Uebungsblatt 2 Assembler Quelltext 2002-11-10 21:35
Zaphod
Hmm… also jetzt mal, das was ich vermute (das muss aber nicht unbedingt stimmen, aber wenn ich jetzt keinen Unsinn mache, dann glaubt Björn das auch, er hatte die meisten Ideen, die ich jetzt als meine eigenen präsentiere [img]http://www.sternenvolk.de/symb/25.gif[/img]):

.L90: //Label 90: Eine Marke, zu der gesprungen werden kann

! File quadrat.c // mit ! beginnt ein Kommentar
! 1 /* quadrat.c */
! 2
! 3 #include <stdio.h>
! 4
! 5 void unter()
! 6 {
! 7 int b = 5;

mov 5,%i5 // in das Register 5 wird 5 geschrieben

! 8 for (;b>0;–b)

cmp %i5,0 //Das Register 5 wird mit 0 verglichen

ble .L94 //und zwar mit dem comparator "branch less or equal" (kleiner oder gleich), ggf soll an .L94 weitergemacht werden

nop //sonst (?) soll "no operation" ausgeführt werden

! block 2

//ab hier keine ahnung!
.L_y0:

sethi %hi(.L96),%l1

or %l1,%lo(.L96),%l1

.L95:

Re: T3 Uebungsblatt 2 Assembler Quelltext 2002-11-10 21:49
Slater
na da hab ich dann ja doch schon ne menge rausgefunden, wenn du nciht weiterweisst [img]http://www.sternenvolk.de/symb/24.gif[/img]

! block 2 .L_y0: sethi %hi(.L96),%l1 or %l1,%lo(.L96),%l1 //auf register %l1 schreiben, was bei .96 steht, //der string für printf .L95: .L92: ! 9 { ! 10 printf("Quadrat: %d\n", b*b); smul %i5,%i5,%o1 //b^2 auf %o1 call printf //ptrintf mov %l1,%o0 //den string wieder für printf bereitstellen sub %i5,1,%i5 // for schleife kleiner cmp %i5,0 // wieder vergleichen bg .L92 // zurück zum schleifenanfang wenn > (?) nop //sonst nix ! block 3 .L97: .L94: .L89: jmp %i7+8 //zurück zu main restore //register wieder schick für main […]
dazu noch
.L96: //beschreibung des strings für printf .ascii "Quadrat: %d\n\000" .type .L96,#object .size .L96,13
bleibt bei mir erst mal die frage offen, was vor dem ersten
printf-aufruf bei %o0 steht?/ wieso wird 'mov %l1,%o0'
nicht vor 'call printf' geschrieben?

und wie ist die semantik von bg/ble und den folgenden zeilen


Re: T3 Uebungsblatt 2 Assembler Quelltext 2002-11-10 21:52
Tzwoenn
Hatte heut T-Übung… kleiner Tip: Alle Sprungbefehle werden verzögert ausgeführt, d.h. der Befehl der nach dem Sprung steht, wird noch ausgeführt, bevor der Sprung selber dran kommt. Hat was mit den Pipelines in Sibirien zu tun… mein Tutor nuschelte da was von besserer Prozessornutzung. Während dieser eine nach dem Sprungbefehl stehende Befehl ausgeführt wird, "bereitet die CPU den Sprung vor" (O-Ton Tutor).
Deswegen muss da ab und zu ein nop stehen, sonst würde die CPU an dem Offset irgendwas machen, aber nicht unbedingt das, was sie soll [img]http://www.sternenvolk.de/symb/22.gif[/img]


Re: T3 Uebungsblatt 2 Assembler Quelltext 2002-11-10 21:54
Zaphod
Also so ein Label kann nicht nur Programmtext sein, der ausgeführt wird, sondern das kann auch für eine Variable verwendet werden?

Re: T3 Uebungsblatt 2 Assembler Quelltext 2002-11-10 21:56
Tzwoenn
Kurz und knapp: Jepp

Re: T3 Uebungsblatt 2 Assembler Quelltext 2002-11-10 21:57
Tzwoenn
Oder besser gesagt: Pointer auf eine Variable

Re: T3 Uebungsblatt 2 Assembler Quelltext 2002-11-10 22:01
Zaphod
L_y0:

sethi %hi(.L96),%l1

or %l1,%lo(.L96),%l1

//auf register %l1 schreiben, was bei .96 steht,

//der string für printf

und was bedeuten jetzt sethi und or?
was ist der unterschied zwischen %lo und %hi?
Wofür steht Ly_0:
und wie funktioniert die Syntax?

Re: T3 Uebungsblatt 2 Assembler Quelltext 2002-11-10 22:09
Slater
L_y0:

sethi %hi(.L96),%l1

or %l1,%lo(.L96),%l1

//auf register %l1 schreiben, was bei .96 steht,

//der string für printf

und was bedeuten jetzt sethi und or?
was ist der unterschied zwischen %lo und %hi?
Wofür steht Ly_0:
und wie funktioniert die Syntax?

müsste so gehen:
alles 32 bit-geschichten,

%hi(.L96) liefert obere 22 bit von .L96,
%sethi setzt diese bei %l1 auf die oberen 22

der zweite befehl analog für untere 10 bits, mit befehl or und den unteren 10 bits von .L96 dank %lo(.L96)



der or-befehl:

bit 0, …, bit 21, 0,0,0,0,0,0,0,0,0,0 in %l1

or

0,…………..,0, bit 22 ………..31 in %lo(.L96)

=

bit 0 … bit 31 in %l1 wie in .L96

Re: T3 Uebungsblatt 2 Assembler Quelltext 2002-11-10 22:11
Tzwoenn
Nach der Syntax frag mich lieber nicht, aber die soll in dem schönen Heftchen drin stehen.
"sethi %hi(.L96),%l1" setzt die operen 22bit des Registers %l1 (die restlichen 10bit gehen für den Befehl o.ä. drauf)
"or %l1,%lo(.L96),%l1" sorgt dafür, dass auch dir unteren 10bit gesetzt werden.

.L_y0 ist ne Marke… keine Ahnung, warum da eine ist. Der Compiler ist eh fürn Arsch, weil er nur grundlegende Dinge optimiert.

Re: T3 Uebungsblatt 2 Assembler Quelltext 2002-11-10 22:14
Zaphod
Hmm.. mir leuchtet imemr noch nicht ein, warum die ersten 22 und die nachfolgenden 10 bit getrennt gesetzt werden müssen. Kann man nicht einfach

mov .L96, %i1

oder sowas machen? Ich finde das echt unlogisch.

Re: T3 Uebungsblatt 2 Assembler Quelltext 2002-11-10 22:17
Slater
mehr als 22 bit kann er halt nicht verarbeiten, der arme sparci, ist ja nicht so, dass .L96 ein register ist, dass man mit 5 bits ansprechen könnte..,
wie genau es ist, ..

Re: T3 Uebungsblatt 2 Assembler Quelltext 2002-11-10 22:19
Zaphod
Ach.. ein Register umfasst 5 Bits?

Re: T3 Uebungsblatt 2 Assembler Quelltext 2002-11-10 22:24
Slater
ne die adresse davon, da es nur 32 gibt, so grob gesehen


Re: T3 Uebungsblatt 2 Assembler Quelltext 2002-11-10 22:57
TriPhoenix
Hmm.. mir leuchtet imemr noch nicht ein, warum die ersten 22 und die nachfolgenden 10 bit getrennt gesetzt werden müssen. Kann man nicht einfach

mov .L96, %i1

oder sowas machen? Ich finde das echt unlogisch.

Ein Befehl is genau 32 Bit breit. Da muss nun noch die ganze Info rein, welcher Befehl, welches Register etc. Da bleiben nur noch 22 Bit im Idealfall über und wenn man ne 32-Bit-Zahl reinpacken wollte müssten die ja alle ind en Befehl. Deswegen muss man die 22 Bit getrennt machen

Re: T3 Uebungsblatt 2 Assembler Quelltext 2002-11-10 23:06
Tzwoenn
Exakt, kannst ja gerne mal "mov .L96, %i1" versuchen… wenn du Glück hast, gibs nur ne Segmentation fault.

Re: T3 Uebungsblatt 2 Assembler Quelltext 2002-11-10 23:10
Zaphod
Was wäre, wenn man statt der 32-Bit-Zahl einen Pointer auf sie übergibt? Der verbraucht doch weniger Platz…

Re: T3 Uebungsblatt 2 Assembler Quelltext 2002-11-10 23:24
Tzwoenn
Nööö, tut er nicht. Die 32bit werden gebraucht, um die 4GB Speicher ansprechen zu können, die der Sparc verwalten kann.

Re: T3 Uebungsblatt 2 Assembler Quelltext 2002-11-11 00:57
TriPhoenix
Was wäre, wenn man statt der 32-Bit-Zahl einen Pointer auf sie übergibt? Der verbraucht doch weniger Platz…

Die Zahl die Übergeben werden soll ist ja nur ein Pointer. Ich glaube nicht dass du das Problem dadurhc Löst, anstatt den Pointer auf den String jetzt den Pointer auf den Pointer auf den String zu übergeben :)


Re: T3 Uebungsblatt 2 Assembler Quelltext 2002-11-11 08:01
Zaphod
hmm… verdammt [img]http://www.sternenvolk.de/symb/25.gif[/img]
darauf hatte ich nicht geachtet..