2016-11-19 2 views
1

Ich suche nach Code mit der Assemblersprache für Microblaze und weiß nicht, wie man ein Allzweckregister mit einer 32-Bit-Nummer lädt. Ich habe den Befehlssatz durchlaufen, sehe aber nur 16-Bit-Sofortwerte, die geladen werden können.Wie man einen 32-Bit-Wert in ein Register mit Microblame-Assembly lädt

Kann jemand ein Beispiel dafür geben, wie dies zu tun ist.

konnte ich

shi r8 r0 %0 /* where %0 is to the top 16 bits of a variable */ 
then shift it ? 
and then load r8 bottom bytes? 

Ich bin verwirrt verwendet. Jede Hilfe, um mich in die richtige Richtung zu lenken, wäre großartig.

+1

Google sagt, Microblaze ist eine 32-Bit-RISC-Architektur. Eine 32-Bit-Konstante würde ein ganzes Befehlswort aufnehmen, wobei keine Bits für einen Opcode oder ein Ziel verbleiben. Wie bei allen anderen Architekturen mit fester Befehlsgröße benötigen Sie mehrere Anweisungen. Die meisten ISAs haben speziell dafür eine Anleitung, die das Zusammenführen von oberen und unteren Hälften erleichtert. Assembler haben oft eine Pseudo-Op, die ein 32-Bit-Argument akzeptiert und beide Anweisungen ausgibt. Aber ich weiß eigentlich nichts über Microblaze. –

Antwort

1

Vom Microblaze Refference Guide:

Typ B Befehle haben ein Quellregister und einen 16-Bit-Immediate Operanden (die durch vor dem Typ B Befehl mit einem IMM-Befehl auf 32 Bit erweitert werden können).

Was bedeutet, wenn Sie in Assembler-Sprache schreiben, können Sie 32-Bit-Direkt ohne Sorgen verwenden:

or r1, r0, 0x12345678 

und Assembler es in erweitern:

imm 0x1234 
or r1, r0, 0x5678 
Verwandte Themen