• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[erledigt] Assembler Script Problem

A

Anonymous

Gast
Hallo,

so die erste Übungsaufgabe ist gemeistert, hoffe ich. Und schon wieder (hoffentlich nicht zu blöde) Fragen... :D

Ich habe hier ein kleines Assemblerprogramm (da stimmt leider die Formatierung nicht mehr):
Code:
.data
x:	.half	0xABCD
little:	.asciiz	"little-endian \n"
big:	.asciiz	"big-endian \n"
.text
main:
	lb	$t0, x			  # erstes Byte
	lb	$t1, x+1		# zweites Byte
	addi	$t2, $zero, 0xCD  # 0xCD in $t2 laden
	beq	$t2, $t0, littleout	# 0xCD mit erstem Byte vergleichen und          ggf zu littleout
	beq	$t1, $t0, bigout	# 0xCD mit erstem Byte vergleichen und ggf zu bigout
littleout:				# Ausgabe für little-endian und Sprung zu end
	la	$a0, little
	li	$v0, 4
	syscall
	j	end	
bigout:					# Ausgabe für little-endian und Sprung zu end
	la	$a0, big
	li	$v0, 4
	syscall
	j	end
end:					# beenden
	li	$v0, 10
	syscall

Wenn ich das jetzt in der Konsole mit spim aufrufe, geht es:
Code:
21:03 RossTheBoss:~/Temp > spim bytereihenfolge.s
SPIM Version 7.3. of August 28, 2006
Copyright 1990-2004 by James R. Larus (larus@cs.wisc.edu).
All Rights Reserved.
See the file README for a full copyright notice.
Loaded: /usr/lib/spim/exceptions.s
little-endian

Wenn ich es jetzt versuche mit g(as), bekomme ich das:
Code:
21:03 RossTheBoss:~/Temp > as bytereihenfolge.s
bytereihenfolge.s: Assembler messages:
bytereihenfolge.s:0: Warning: end of file not at end of a line; newline inserted
bytereihenfolge.s:2: Error: unknown pseudo-op: `.half'
bytereihenfolge.s:3: Error: unknown pseudo-op: `.asciiz'
bytereihenfolge.s:4: Error: unknown pseudo-op: `.asciiz'
bytereihenfolge.s:7: Error: no such instruction: `lb $t0,x'
bytereihenfolge.s:8: Error: no such instruction: `lb $t1,x+1'
bytereihenfolge.s:9: Error: no such instruction: `addi $t2,$zero,0xCD'
bytereihenfolge.s:10: Error: no such instruction: `beq $t2,$t0,littleout'
bytereihenfolge.s:11: Error: no such instruction: `beq $t1,$t0,bigout'
bytereihenfolge.s:13: Error: no such instruction: `la $a0,little'
bytereihenfolge.s:14: Error: no such instruction: `li $v0,4'
bytereihenfolge.s:16: Error: no such instruction: `j end'
bytereihenfolge.s:18: Error: no such instruction: `la $a0,big'
bytereihenfolge.s:19: Error: no such instruction: `li $v0,4'
bytereihenfolge.s:21: Error: no such instruction: `j end'
bytereihenfolge.s:23: Error: no such instruction: `li $v0,10'

Stimmt da der Aufruf nicht, habe ich vergessen, ein Paket zu installieren, oder kennt g(as) die ganzen Befehle nicht? Wir haben uns halt immer an unser Skript gehalten, das sich nur auf (x)spim bezieht.
Als weitere Erfahrung kann ich sagen, xspim ist Dreck (sehr umständlich alles), spim in der Konsole geht. Wir haben jetzt aber auch noch nicht soviel gemacht. Sind grade am Anfang... :wink:

Schöne Grüsse
 

abgdf

Guru
Also, so gut kenne ich mich nicht aus, aber ich glaube, das liegt eben daran, daß Assembler (schlecht portabel und auch) in der Syntax sehr uneinheitlich ist:

http://de.wikipedia.org/wiki/Assemblersprache#Verschiedene_Assemblersprachen

Auch:
http://webster.cs.ucr.edu/AsmTools/WhichAsm.html
http://www.ibm.com/developerworks/linux/library/l-gas-nasm.html

Gruß
 

whois

Ultimate Guru
Hi

Sieht so aus als wenn er EOF nicht finden könnte.
Füg mal am Ende des Scripts noch eine Leerzeile ein, vielleicht reicht das schon.

Ich teile den Thread mal das hat nichts mehr mit Programm Suche zu tun.

cu
 
OP
A

Anonymous

Gast
Guten Morgen,

Ich habe die Leerzeile eingefügt, hat aber nichts gebracht. Ich werde dann mal die Links von abgdf lesen.

Cu
 

abgdf

Guru
Das ist nett, aber ich denke, wenn ihr "spim" verwendet, wirst Du da wohl mitziehen müssen. Laut

http://de.wikipedia.org/wiki/SPIM

emuliert das sogar einen bestimmten Prozessor :shock:.

Gruß
 
Du musst GNU AS natürlich schon als MIPS-Variante vorliegen haben¹ bevor du MIPS-Assembler darin schreiben kannst. Und eigentlich brauchst du dann noch eine MIPS-Maschine (oder qemu), um es auszuführen.
(¹ ./configure --target=mips-linux )
Aber es wäre viel einfacher, und vor allen Dingen zeitgemäßer sich mit x86/x86_64 zu beschäftigen—das hat nämlich jeder.
 
OP
A

Anonymous

Gast
Hi,

Aber es wäre viel einfacher, und vor allen Dingen zeitgemäßer sich mit x86/x86_64 zu beschäftigen—das hat nämlich jeder.
Unser Informatik-Skript hält sich nur an spim. Von was Anderem ist da nicht die Rede. Keine Ahnung, ob das die Prüfungs - oder Studienordnung so vorschreibt. Ich weiss ja nicht, wie gross da der Unterschied vom "lern-technischen" zwischen spim und x86/x86_64 ist. Vielleicht wäre es zu viel als Einführung, das kann ich (noch) nicht beurteilen...
Ich bleibe dann jedenfalls bei spim, da ja scheinbar MIPS-Assembler der Stoff ist.

Jedenfalls danke für die Antworten :D
 
Oben