MIPS Assemblersprache - frage zu Bitstring

12/28/2018 16:04 Gr@mPeR#1
Moin


Das Modul hat gerade erst begonnen und ich stehe damit noch ganz am Anfang. Entschuldigt bitte blöde fragen :)

Wir haben vom Prof. über die Ferien eine Hausaufgabe bekommen, und eine Unteraufgabe besteht daraus 'in einem bitstring die gesetzten bits (einsen) zu zählen'
Der Bitstring ist mit
Quote:
bit_string: .word 0x00000001
bereits deklariert.

Wäre dies ein richtiger string, z.B.
Quote:
bit_string: .asciiz "01010101"
könnte man ja die über die einzeln die bytes mit

Quote:
lb $t1, 0($t1)
auslesen, und jeweils überprüfen ob es sich um eine 1 handelt (branch if equal)

Doch wie mache ich das ganze jetzt für den gegeben bit_string vom Typ .word? Wenn ich das richtig sehe ist das doch lediglich eine '1' in hexadezimal?
Ich habe es genau wie beim ''lb $t1, 0($t0)" versucht, aber bereits beim ersten duchlauf, sagt er dass er

Quote:
line 125: Runtime exception at 0x004000b8: address out of range 0x00000000
Hintergrund zur Aufgabe:


Bin für jede Hilfe dankbar :)

Grüße
12/28/2018 16:51 florian0#2
Ein "richtiger String" hat (vermutlich) ein Byte pro Stelle. Ist damit quasi ein "Byte string".
An die Bytes kommst du mit lb $t1, 0($t1). Ein "Bit String" hat ein Bit pro Stelle. Ich hab keinen Plan ob MIPS spezielle Instruktionen hat um an die Bits zu kommen, ich vermute mal nicht. Schau dir mal Bit-Operatoren an. Left Shift, Right Shift, And und Or reichen aus um die Aufgabe zu lösen.