Ich habe einen kurzen Ausschnitt der RISC-V-Assembly, den ich nicht verstehe. Ich bin mir nicht sicher, ob ich die Anweisungen falsch interpretiere, nach meiner Interpretation scheint es, als ob die Verzweigung (BNE) genommen wird, aber es ist gegeben, dass es nicht sein sollte.
Gegebener kommentierter Code:
000001b8 <test_4>:
lui sp,0xfffff # -> load [sp] = 0xfffff000
addi sp,sp,-96 # -> add -96 to [sp], resulting in [sp] = 0xffffefa0
sb sp,2(ra) # -> store 0xffffffff (sign extend [23:16] of [sp]) to memory
lh a4,2(ra) # -> load halfword from data memory to [a4] = 0xffffffff
lui t2,0xfffff
addi t2,t2,-96 # -> [t2] = 0xffffefa0
li gp,4
bne a4,t2,56c <fail> # -> guaranteed fail since 0xffffffff != 0xffffefa0?
Jede Hilfe wäre sehr willkommen!
Du scheinst falsch zu verstehen SB
:
sb sp,2(ra) # -> store 0xffffffff (sign extend [23:16] of [sp]) to memory
Dieser Kommentar ist nicht korrekt. Dies speichert 0xa0 (untere 8 Bits von sp) im Speicher. Die Adresse ist ra+2.
a4 hat den Wert, 0xSSSSXXa0
wo XX
der Wert ist, der sich zufällig im nächsten Byte befindet, und SSSS
ist die Vorzeichenerweiterung davon. Wenn dieses Byte war, 0xef
dann kann a4 tatsächlich den Wert haben 0xffffefa0
.
jhe4x
jhe4x
SimonB