2016-10-31 3 views
0

Ich versuche, ein sehr einfaches Programm auszuführen, aber ich erhalte immer die Fehlermeldung: Invalid language elementMontag Ungültige Sprachelement Mips

lw $t0, 0($a0)    #load integer from $a0->$t0 
beq $t0, 1, 1dimensional  #branch if $t0=1 

1dimensional: 
do something 

Ich kann nicht verstehen, warum ich die Störung erhalten.

+0

http://www.mrc.uidaho.edu/mrc/people/jff/digital/MIPSir.html sagt BEQ nimmt zwei Register Operanden und ein Label, nicht eine sofortige. –

+0

@PeterCordes Die Verwendung eines direkten als zweites Argument ist _valid_, weil 'beq' ein Pseudo-Op ist [wenn der Assembler es unterstützt, was' mars' tut]. Es erzeugt die folgende "echte" Befehlssequenz: addi $ at, $ null, 1'/'beq $ at, $ t0,1dimensional'. –

+0

Ah, ok, dann nicht ein Duplikat von http://Stackoverflow.com/questions/16760255/why-we-cant-compare-bne-beq-a-register-with-animediate-assembly-mips, wenn Sie einen Assembler verwenden, der $ r1 für Sie zerstört, während Sie beq als Pseudo-Op erweitern. Das scheint mir ziemlich komisch, aber ich denke, wenn man 31 Architekturregister hat, ist es in Ordnung, einige von ihnen zu verschwenden, so wie die beiden, dass das Betriebssystem asynchron klobbern darf. –

Antwort

2

Sie haben einen entscheidenden Teil der Fehlermeldung weggelassen, nämlich was das ungültige Sprachelement war.
Worüber sich der Assembler beschwert, ist das Label 1dimensional. Es ist üblich, dass Assembler nur Buchstaben und Unterstriche (und möglicherweise eine einzelne .) als erstes Zeichen eines Etiketts zulassen. Ändern Sie also den Namen dieses Labels in etwas, das diese Anforderung erfüllt, z. onedimensional.