2016-11-04 10 views
0

Ich habe 16 hexadezimale Werte, die ich versuche zu durchlaufen und isolieren die Bits bei b6, b2, b1, b0 das ist, wo ich die 0x47 von bekam.Mips Assembly Sprache isolierende Bits

.data 
    #dellares all 16 test cases hexadecimal values 
    testCases: .byte 0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47 

    #set size of array to 16 
    size: .word 16 

    NL: .asciiz "\n" 
    .text  

main: 
lw $s7, size 
move $s1, $zero 
move $s2, $zero 

loop: 
bge $s1, $s7, loop_end 
lb $s0, testCases($s2) 

andi $a0, $s0, 0x47 
li $v0, 1 
syscall 
la $a0, NL 

li  $v0, 4 
syscall 
addi  $s1, $s1, 1 
addi  $s2, $s2, 4 
j  loop 

loop_end: 

Dies gilt jedoch nicht das gewünschte Ergebnis auszudrucken, druckt es aus these results

als Sie für jede Hilfe

Antwort

0

Sie sind durch eine Reihe von Bytes gehen, so sollten Sie nur 1 hinzufügen $s2, nicht 4.

Falls Sie die Ergebnisse in hexadezimaler Form drucken wollten, müssen Sie Ihre eigene Routine zum Konvertieren der Zahlen in Strings schreiben, da SPIM keinen Systemaufruf hat fo r das. MARS does, aber es werden führende Nullen hinzugefügt, so dass jede Zahl mit 8 hexadezimalen Ziffern gedruckt wird.

Auch ich habe es nicht wirklich klar gefunden, wenn Sie nur diese 4 Bits erhalten wollten, oder wenn Sie sie auch zusammen gruppieren wollten (z. B. 0x43 ->0xB). Wenn Sie sie zusammen gruppieren wollen, wird es etwas mehr als nur ein AND (und zusätzliche AND, eine Rechtsverschiebung und ein OR, um genau zu sein).