Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

extend16_s: Wasm numerische Anweisung

Die extend16_s numerische Anweisung signalerweitert die unteren 16 Bits eines Ganzzahlwertes, um dessen Vorzeichen über den gesamten Wert hinweg fortzuführen.

Probieren Sie es aus

(module
  (import "console" "log" (func $log (param i32)))
  (func $main

    i32.const 0xffff
    i32.extend16_s
    call $log

  )
  (start $main)
)
const url = "{%wasm-url%}";
await WebAssembly.instantiateStreaming(fetch(url), { console });

In diesem Beispiel schiebt i32.const 0xffff den Wert 0xffff (65535) auf den Stapel. Dieser Wert stellt -1 dar, wenn er als vorzeichenbehafteter 16-Bit-Wert gelesen wird; i32.extend16_s signalerweitert ihn zu 0xffffffff — was -1 als voller vorzeichenbehafteter 32-Bit-Wert repräsentiert.

WAT Syntax

value_type.extend16_s
value_type

Der Typ des Wertes, auf den die Anweisung angewendet wird. Die folgenden Typen unterstützen extend16_s:

extend16_s

Die extend16_s Anweisung. Muss immer nach dem value_type und einem Punkt (.) eingefügt werden.

Unmittelbare Werte

Keine.

Operandenstapel

[input: i32] -> [output: i32]
[input: i64] -> [output: i64]
input

Der Eingabe-Ganzzahlwert i32 oder i64.

output

Der Ausgabe-Ganzzahlwert i32 oder i64.

Binäre Kodierung

Anweisung Binärformat Beispieltext => binär
i32.extend16_s 0xc1 i32.extend16_s => 0xc1
i64.extend16_s 0xc3 i64.extend16_s => 0xc3

Beschreibung

Die Signalerweiterung ist nützlich, weil Wasm-Ganzzahlen eine feste Breite (32- oder 64-Bit) haben, Sie jedoch oft mit kleineren Werten arbeiten möchten — wie einem i8 oder i16 — die in ihnen gespeichert sind. Wenn Sie einen negativen kleinen Wert nullausfüllen, um die restlichen Bits zu füllen, erhalten Sie die falsche Zahl: Das Bitmuster, das -1 als 16-Bit-Wert bedeutet, stellt nach dem Nullausfüllen nicht mehr -1 dar.

Die extend16_s Anweisung behebt dies, indem sie die unteren 16 Bits des Wertes nimmt, sie als vorzeichenbehaftete 16-Bit-Ganzzahl behandelt und das Vorzeichenbit (Bit 15) durch alle verbleibenden Bits des i32 oder i64 kopiert.

Dies ist nützlich, wann immer Sie einen 16-Bit-Wert geladen oder erzeugt haben (zum Beispiel aus einem Zwei-Byte-Wert im Speicher) und ihn korrekt in arithmetischen Operationen mit voller 32- oder 64-Bit-Breite verwenden müssen.

Spezifikationen

Spezifikation
WebAssembly Core Specification
# numeric-instructions%E2%91%A6

Browser-Kompatibilität

Siehe auch