| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/de/docs/WebAssembly/Reference/Numeric/or | [Back] [Original] |
Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.
Die or numerische Anweisung wird verwendet, um eine bitweise ODER-Operation durchzufhren, hnlich dem | Operator in anderen Sprachen.
(module
(func (export "or") (param $a i32) (param $b i32) (result i32)
;; load both numbers onto the stack
local.get $a
local.get $b
;; `or` both numbers and return the result
i32.or
)
)
const url = "{%wasm-url%}";
await WebAssembly.instantiateStreaming(fetch(url), { console }).then(
(result) => {
const or = result.instance.exports.or;
const res = or(0b10000010, 0b01101111);
console.log(numToBin(res));
// Expected output: "11101111"
},
);
function numToBin(num) {
return (num >>> 0).toString(2).padStart(8, "0");
}
value_type.or
value_typeDer Typ des Wertes, auf den die Anweisung angewendet wird. Die folgenden Typen untersttzen or:
i32i64v128orDie or-Anweisung. Muss immer nach dem value_type und einem Punkt (.) eingefgt werden.
[input1, input2] -> [output]
Bei einer nicht-SIMD or sind dies grundlegende numerische Werte wie 14 oder 3.
Bei einer SIMD or sind dies v128-Wertinterpretationen, zum Beispiel i32x4 9 4 -16 100. Jedes Lane des auf den Stack geschobenen Ausgabes ist das bitweise ODER der entsprechenden Lanes in den Eingabewerten.
| Anweisung | Binrformat | Beispieltext => binr |
|---|---|---|
i32.or |
0x72 |
i32.or => 0x72 |
i64.or |
0x84 |
i64.or => 0x84 |
v128.or |
0xfd 80:u32 |
v128.or => 0xfd 0x50 |
In diesem Beispiel demonstrieren wir die Ausfhrung von v128.or auf zwei SIMD-Werten und die Ausgabe eines der Lane-Werte des Ergebnisses.
In unserem Skript erhalten wir eine Referenz zu einem <p>-Element, an das wir unser Ergebnis ausgeben werden, dann definieren wir ein Objekt fr den Import in Wasm, das eine einzelne Funktion enthlt, die einen Wert an das Ausgabe-<p> schreibt. Wir kompilieren und instanziieren dann unser Wasm-Modul mithilfe der WebAssembly.instantiateStreaming()-Methode und importieren das Objekt im Prozess.
<p></p>
const outputElem = document.querySelector("p");
const obj = {
output(val) {
outputElem.textContent += val;
},
};
WebAssembly.instantiateStreaming(fetch("{%wasm-url%}"), {
obj,
});
In unserem Wasm-Modul importieren wir zunchst die JavaScript-output()-Funktion und stellen sicher, dass sie einen i32-Parameter hat. Wir deklarieren dann zwei SIMD-i32x4-Werte und verwenden v128.or, um die Bits der binren Darstellung jedes Wertes zu "odern". Schlielich extrahieren wir den in Lane 3 des Ausgabewertes gespeicherten Wert mithilfe der extract_lane-Anweisung und geben ihn durch Aufruf der importierten output()-Funktion an das DOM aus.
(module
;; Import output function
(import "obj" "output" (func $output (param i32)))
(func $main
;; load two SIMD values onto the stack
v128.const i32x4 12 10 11 782
v128.const i32x4 12 14 15 400
v128.or ;; "or" the two values
i32x4.extract_lane 3 ;; Extract a value from the result
call $output
)
(start $main)
)
Die Ausgabe ist wie folgt:
926 wird ausgegeben, weil dies das Ergebnis des "Or" von Lane 3 des ersten Wertes (782) und dem zweiten Wert (400) ist. Wenn Sie sich deren binre Entsprechungen ansehen, wird klar, wie dies funktioniert:
782 = 0000 0011 0000 1110
400 = 0000 0001 1001 0000
-------------------
OR = 0000 0011 1001 1110 = 926
| Spezifikation |
|---|
| WebAssembly Core Specification # numeric-instructions%E2%91%A8 |
Der Bauplan fr ein besseres Internet.
Teile dieses Inhalts sind 19982026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfgbar unter einer Creative-Commons-Lizenz.
| Web Proxy Viewer | New URL | Original Page |