Tengo un breve fragmento de ensamblaje RISC-V que tengo problemas para entender. No se si estoy interpretando mal las instrucciones, por mi interpretación parece que se va a tomar la sucursal (BNE) pero se da que no debe ser.
Dado el código comentado:
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?
¡Cualquier ayuda sería muy apreciada!
Parece que no entiendes SB
:
sb sp,2(ra) # -> store 0xffffffff (sign extend [23:16] of [sp]) to memory
Este comentario no es correcto. Esto almacena 0xa0 (los 8 bits inferiores de sp) en la memoria. La dirección es ra+2.
a4 tendrá el valor de 0xSSSSXXa0
donde XX
está cualquier valor que se encuentre en el siguiente byte y SSSS
es la extensión de signo del mismo. Si ese byte fuera 0xef
entonces a4 puede tener el valor 0xffffefa0
.
jhe4x
jhe4x
Simón B.