Not logged in. · Lost password · Register

Bibi
Avatar
Member since Feb 2003
277 posts
Subject: offene Fragen
Hallo habe ein paar offene Fragen bzw bin mir mit den antworten nicht sicher...vielleicht könnt ihr ja euren Senf dazu geben ;)

1)
Warum sollte ein Assembler Programmierer die Byte-Order seines Rechners kennen,während die Bit Order des Rechners im allgemeinen keine Rolle spielt?

2)
Während der Initialisierung eine PCs wird u.a. folgender BIOS Code(ROM) durchlaufen:

....
movw $L1,%sp
jmp L3
L1: .word L2
L2: ...

L3: ....
     ret

3)Für welche Hochsprachen Konstrukte wird besonders viel Platz auf dem Stack benötigt?

4)
Warum gibt es auf den meisten Prozessoren zwei verschiedene Rechts-Shift-Operationen ,jedoch meist nur eine Links-Shift Operation?

5)
Gespeichert werden soll ein zweidimensionales Array(breite:3elemente,Höhe: 4 Elemente)
Jedes Element des Arrays brauche 2 Byte.Die Startadresse des Arrays im Speicher sei 5000.
Geben Sie eine einfache Formel an,die bei gegebenen Indizes 0<=x<3 und 0<=y<4 die Adresse A(x,y) des Elementes im Speicher berechnet.

6)

Gegeben seien Multiplizierer Bausteine MUL8 die das 8 Bit Produkt zweier 4 Bit Werte erzeugen und elementare VA.
Geben Sie-mit Begründung-an,wieviele Bausteine MUL8 und VA mindestens nötig sind,um einen Multiplizierer aufzubauen,der die unteren 8 Bit des Produktes zweier angelegter Byte Werte (A,B)ausgibt!

7)
Ein Prozessor läuft mit 1GHZ und arbeitet mit jedem Takt genau einen Befehl ab.ER aht für das folgende Programmstück 28ns zu Ausführung benötigt.Wie groß war der Wert von %ecx zum Startzeitpunkt?Begründen Sie Ihre Antwort!

     ...
     jmp test
loop: movl $0,(%ebx)
        addl $4,%ebx
        subl $1,%ecx
        cmpl $0,%ecx
test:  cmpl $0,%ecx
         jne loop
         .....

das wars erst einmal...vielleicht hat ja wer ne idee...
Claudius
Avatar
Member since Oct 2002
956 posts
zu 1):  Ich denke weil ein Byte die kleinste addressierbare Einheit ist - um alles drunter kümmert sich dann die Hardware..

Was ist die Frage bei 2? War das was mit der Stackpointer Initialisierung?
Im mod(1) sind wir alle gleich....
UQi ⊂ ΦMilch ⊂ ΦNutz ;i ∈ ℕ
Q ∪ Φk = φNutz ∀k ∈ Deck
Bibi
Avatar
Member since Feb 2003
277 posts
huch glatt da was weggelassen
man soll sagen was dort gemacht wird und welcher sinn diese umständliche programmierweise haben könnte
fredator
Ca$h Carlo$
Avatar
Member since Mar 2003
953 posts
2) schaut aus wie ein manueller Unterprogrammaufruf. Warum manuell? naja, weil wir im ROM sind koennen wir nicht einfach nen Stack anlegen oder Sachen auf selbigen schieben. Wir muessen die Adresse zunaechst auf 16 bit aufpumpen (word) und dann das Vieh auf den 16bit-Stackregister schreiben.

3) Naja, ich wuerd sagen platzintensiv sind grundsaetzlich mal zusammengesetzte Datentypen wie Records, Arrays und in der ultracombo dann Arrays von Records
1.Sys: ZX Spectrum +2, 128K RAM, 0MB HD, Kassettendeck, RS232 Interface
2.Sys: Nintendo GameBoyAdvance SP, Metallicblau, 32bit CPU, Sound, Video/Mucke/NES Player
3.Sys: Sega Dreamcast, 128Bit, 2Mem Cards, 10+Spiele, SNES emulator, 2 (!) Controller
Mikey
SP Team
Avatar
Member since Nov 2002
641 posts
In reply to post #1
Quote by Bibi on 2005-07-15, 00:30:
4)
Warum gibt es auf den meisten Prozessoren zwei verschiedene Rechts-Shift-Operationen ,jedoch meist nur eine Links-Shift Operation?
Es gibt einen Shift der das Vorzeichenbit (das hoechstwertige Bit) erhaelt und einen der in jedem Fall mit 0 auffuellt. Der richtige Shift haengt also vom Anwendungszweck ab.
Beispiel Division durch 2 mit 4 Bits:

1100 unsigned = 12

Willst Du das also durch zwei teilen erwartest Du das Ergebnis 6,
also 0110. Beim Shift wird das oberste Bit also mit einer 0 aufgefuellt.

1100 signed = -4

Wenn man das nun durch zwei teilt, erwartet man als Ergebnis -2, also 1110. Hier wird beim Shift das hoechstwertige Bit erhalten.

In letzterem Fall spricht man von einem arithmetischen Shift, in ersterem von einem logischen Shift.

Bei einem Shift in die andere Richtung tritt das Problem nicht auf.
Quote by Bibi on 2005-07-15, 00:30:
5)
Gespeichert werden soll ein zweidimensionales Array(breite:3elemente,Höhe: 4 Elemente)
Jedes Element des Arrays brauche 2 Byte.Die Startadresse des Arrays im Speicher sei 5000.
Geben Sie eine einfache Formel an,die bei gegebenen Indizes 0<=x<3 und 0<=y<4 die Adresse A(x,y) des Elementes im Speicher berechnet.
wenn Array[3][4]
A(x,y) = 5000 + x*2*4 + y*2

Quote by Bibi on 2005-07-15, 00:30:
7)
Ein Prozessor läuft mit 1GHZ und arbeitet mit jedem Takt genau einen Befehl ab.ER aht für das folgende Programmstück 28ns zu Ausführung benötigt.Wie groß war der Wert von %ecx zum Startzeitpunkt?Begründen Sie Ihre Antwort!

     ...
     jmp test
loop: movl $0,(%ebx)
        addl $4,%ebx
        subl $1,%ecx
        cmpl $0,%ecx
test:  cmpl $0,%ecx
         jne loop
         .....
1 GHz bedeutet 10^9 Takte pro Sekunde. Wenn in jedem Takt ein Befehl bearbeitet wird bedeutet das also 10^9 Befehle pro Sekunde. In 28 ns kann der Prozessor 28 Befehle abarbeiten.

Im Programm wird in jedem Schleifendurchlauf (bist Du sicher dass der cmpl $0, %ecx zweimal nacheinander im Programm steht??) ecx um eins erniedrigt bis er irgendwann 0 erreicht.
Unter Einbezug des jmp vor der Schleife wird die Schleife bis zum Abbruch nach 28 ns vier mal durchlaufen. Der Wert von ecx muss zu Beginn also 4 gewesen sein, sonst wuerde die Schleife nicht nach 28 Befehlen verlassen. Allerdings geht die Rechnung so nicht ganz auf.. Wenn das eine cmpl fehlen wuerde, waeren es 5 Durchlaeufe und ecx waere zu Beginn 5. (und die Rechnung geht auf).
Close Smaller – Larger + Reply to this post:
Verification code: VeriCode Please enter the word from the image into the text field below. (Type the letters only, lower case is okay.)
Smileys: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Special characters:
Go to forum
Datenschutz | Kontakt
Powered by the Unclassified NewsBoard software, 20150713-dev, © 2003-2011 by Yves Goergen