Verständnisfrage bei einer Mips Übungsaufgabe

Gast #5669472
Lesenswert?
• ▲
▼
Hallo,
ich versuche mich gerade neben der Schule etwas mit Mips und komme 
eigentlich relativ gut klar, bei den grundlegenden Sachen. Nun habe ich 
diese Übungsaufgabe in einem Buch gefunden

"Bestimmen Sie die Anzahl der Instruktionen, die von der CPU ausgeführt 
werden" und dazu diesen Code:
li $t0 , 0
li $a0 , 5
li $s0 , 0
li $s1 , 0

for_loop :
andi $t0 , $s0 , 0x01
beq $t0 , $zero , continue
addi $s1 , $s1 , 1

continue :
addi $s0 , $s0 , 1
blt $s0 , $a0 , for_loop

Die Frage ist nun was mit "Instruktionen, die von der CPU ausgeführt 
werden" gemeint ist? Und wie dies gehen soll.
Ist es etwas wie das Zählen von Befehlen, die man nutzt um die 
potenzielle Laufzeit eines Algorithmuses zu bestimmen?

Grüße
Lina
#5669491
Lesenswert?
• ▲
▼
Lina.N schrieb:
> Die Frage ist nun was mit "Instruktionen, die von der CPU ausgeführt
> werden" gemeint ist? Und wie dies gehen soll.
> Ist es etwas wie das Zählen von Befehlen, die man nutzt um die
> potenzielle Laufzeit eines Algorithmuses zu bestimmen?

Das Programmfragment ist vollständig gegeben und es wird irgendwann 
enden, d.h. unten rausfallen. Der Sinn ist egal. Gesucht ist die Anzahl 
der in diesem Verlauf ausgeführten Befehle.
Gast #5669529
Lesenswert?
• ▲
▼
A. K. schrieb:
> Lina.N schrieb:
>> Die Frage ist nun was mit "Instruktionen, die von der CPU ausgeführt
>> werden" gemeint ist? Und wie dies gehen soll.
>> Ist es etwas wie das Zählen von Befehlen, die man nutzt um die
>> potenzielle Laufzeit eines Algorithmuses zu bestimmen?
>
> Das Programmfragment ist vollständig gegeben und es wird irgendwann
> enden, d.h. unten rausfallen. Der Sinn ist egal. Gesucht ist die Anzahl
> der in diesem Verlauf ausgeführten Befehle.

hallo A. K.
Danke für die Antwort
Also wäre die Lösung:21?
LG
Lina
#5669866
Lesenswert?
• ▲
▼
Dennis H. schrieb:
> bei MIPS gibts noch den branch delay slot.

Dazu müsste man allerdings die in der Lehre verwendete Maschine genauer 
kennen. Ich würde nicht blind drauf wetten, dass eine Lehrmaschine exakt 
mit einer realen MIPS übereinstimmt.

Gerade nicht beim Delay-Slot. Und ganz besonders nicht bei diesem Code. 
Es sein denn, die nächste Frage will wissen, warum dieser Code nicht 
funktioniert.
Gast #5669960
Lesenswert?
• ▲
▼
Dennis H. schrieb:
> bei MIPS gibts noch den branch delay slot.
>
> vielleicht magste es mal mit nem Simulator zählen.
>
> http://spimsimulator.sourceforge.net/

Hallo Dennis,
ich nutze Mars, was ja dasselbe ist.
Hier gibt es einen Zähler dafür, nur weiß ich leider nicht ob dieser 
stimmt.
Er kommt insgesamt auf 32 Instruktionen, davon 5x R-Typ und 26x l-typ.

René H. schrieb:
> Lina.N schrieb:
>> Also wäre die Lösung:21?
>
> Auf soviel komme ich auch.
>
> Grüsse,
> René

Gut, dann scheint es ja doch irgendwie zu stimmen.
Gast #5670890
Lesenswert?
• ▲
▼
Lina.N schrieb:
> Hallo,
> ich versuche mich gerade neben der Schule etwas mit Mips und komme
> eigentlich relativ gut klar, bei den grundlegenden Sachen. Nun habe ich
> diese Übungsaufgabe in einem Buch gefunden


Cool. Dieselbe Hausaufgabe hat unser Prof uns gestellt.
Aus welchem Buch hast Du die denn?
Gast #5670943
Lesenswert?
• ▲
▼
1
Annahme: $zero == 0 
2
In: Anzahl Instruktionen
3

4
Schliefendurchlauf              |     1    |     2    |     3    |     4    |     5    |
5
________________________________|In $s0 $t0|In $s0 $t0|In $s0 $t0|In $s0 $t0|In $s0 $t0|
6
                                |          |          |          |          |          |
7
li $t0 , 0                      | 1  -   0 |          |          |          |          |
8
li $a0 , 5                      | 2  -   0 |          |          |          |          |
9
li $s0 , 0                      | 3  0   0 |          |          |          |          |
10
li $s1 , 0                      | 4  0   0 |          |          |          |          |
11
                                |          |          |          |          |          |
12
for_loop :                      |          |          |          |          |          |
13
andi $t0 , $s0 , 0x01           | 5  0   0 |10  1   1 |15  2   2 |20  3   3 |25  4   4 |
14
beq $t0 , $zero , continue      | 6  0   1 |11  1   2 |16  2   2 |21  3   3 |26  4   4 |
15
addi $s1 , $s1 , 1              | 7  0   1 |12  1   2 |17  2   3 |22  3   4 |27  4   5 |
16
                                |          |          |          |          |          |
17
continue :                      |          |          |          |          |          |
18
addi $s0 , $s0 , 1              | 8  0   1 |13  1   2 |18  2   3 |23  3   4 |28  4   5 |
19
blt $s0 , $a0 , for_loop        | 9  1   1 |14  2   2 |19  3   3 |24  4   4 |29  5   5 |
Gast #5670985
Lesenswert?
• ▲
▼
eher 22. Die Schleifeninstruktion ist ein blt, damit ist die Schleife 
bei s0 = 4 vorbei, die letzten 5 Instruktionen entfallen somit. Außerdem 
ist die erste Instruktion nach for_loop kein addi, sondern andi, s1 wird 
damit nur inkrementiert, wenn s0 die Werte 1 oder 3 hat (für s0 = 0 und 
2 entfallen noch mal 2 Instruktionen). 29-5-2=22
Beitrag #5671033 wurde von einem Moderator gelöscht.
#5671089
Lesenswert?
• ▲
▼
Mit dem Simulator QtSpim kommt man auf 31 Instruktionen, wenn man mit 
single step das Programm abarbeitet.
https://sourceforge.net/projects/spimsimulator/
Version 9.1.19

Hier das Programm test.asm für den Simulator QtSpim.

main:
li $t0 , 0
li $a0 , 5
li $s0 , 0
li $s1 , 0

for_loop :
andi $t0 , $s0 , 0x01
beq $t0 , $zero , continue
addi $s1 , $s1 , 1

continue :
addi $s0 , $s0 , 1
blt $s0 , $a0 , for_loop
#5671216
Lesenswert?
• ▲
▼
A. K. schrieb:
> Mit delay slot ist das Fragment unvollständig und die Frage nicht
> beantwortbar. Häng ein "li $s0,0" in den delay slot hinter dem letzten
> Befehl und lass den Simulator dann sein Werk vollenden.

Im Simulator sind 31 Befehle, ohne die Ausführung des hinzugefügten li 
$s0,0, zum durchlaufen des Programms notwendig.

main:
li $t0 , 0
li $a0 , 5
li $s0 , 0
li $s1 , 0

for_loop :
andi $t0 , $s0 , 0x01
beq $t0 , $zero , continue
addi $s1 , $s1 , 1

continue :
addi $s0 , $s0 , 1
blt $s0 , $a0 , for_loop
li $s0,0
Persönliche Seite #5671220
Lesenswert?
• ▲
▼
A. K. schrieb:
> Mit delay slot ist das Fragment unvollständig und die Frage nicht
> beantwortbar. Häng ein "li $s0,0" in den delay slot hinter dem letzten
> Befehl und lass den Simulator dann sein Werk vollenden.

ich denk mir dann ja ein NOP automatisch nach dem Sprung.

Aber vorher wurde ja schon klar gestellt, daß es sich nur um einen 
theoretischen MIPS handelt der sowas wohl nicht hat. Also so ala RISC-V.

Ich bring halt gern meine Erfahrungen mit realen MIPS-CPU's ein :)

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.