sh
lyszt.net aborda sh e outras instruções RISC-V com mais detalhes.
Formato de codificação
Descrição
sh grava um halfword, 16 bits ou 2 bytes, na memória. Ele corresponde aos carregamentos lh e lhu e armazena o tamanho mais estreito onde sw armazena a palavra completa. A forma é mostrada abaixo. Ele pega o valor no registrador de origem rs2 e grava seus 16 bits mais baixos no endereço no registrador de base rs1 mais o offset. O layout corresponde ao sw, com o registrador de origem nomeado primeiro.
sh rs2, offset(rs1)
Um registrador contém 32 bits e apenas 16 são armazenados, então sh mantém os 16 bits mais baixos e descarta os 16 bits superiores. Armazenamentos não têm escolha com ou sem sinal. Essa escolha pertence aos carregamentos, onde um valor estreito deve ser ampliado para preencher um registrador e os bits ausentes precisam de uma regra. Um armazenamento estreita o valor, e manter os bits baixos é o único comportamento que faz sentido. Se o registrador contém um valor grande demais para 16 bits, os bits extras são perdidos sem aviso, então verifique o intervalo antes de armazenar.
O manual do RISC-V diz que sh armazena os 16 bits baixos do registrador rs2 na memória no endereço de rs1 mais o offset de 12 bits estendido com sinal. Armazenamentos de halfword em endereços pares são naturalmente alinhados e nunca geram um erro de alinhamento. Um armazenamento em um endereço que não é naturalmente alinhado se comporta como o ambiente de execução definir, e o manual diz que pode executar extremamente lentamente.
sh grava todos os formatos de 16 bits que lh e lhu leem de volta, como amostras de áudio, dados de pixel de 16 bits e arrays de halfword. Um padrão comum é ler, modificar e gravar. Carregue um halfword com lhu, ajuste-o no registrador e armazene-o de volta com sh. Apenas os 2 bytes alvo mudam e os bytes ao redor deles permanecem como estavam. Halfwords ficam a 2 bytes de distância, então os loops movem o endereço em 2.
Exemplo
la t0, slot li t1, -5 sh t1, 0(t0) # memory at slot now holds the low 16 bits of -5
