Думaю, без примера понять нельзя, так как я плохо понимаю (оказывается) объектную модель JavaScript.
<html>
<head>
<script>
const X64_getters = {
RAX :function() { var n = this[0]; n = (n & 0xFFFFFFFFFFFFFFFFn) | (this.EXPAND_SIGN && (n & 0x8000000000000000n) ? 0xFFFFFFFFFFFFFFFF0000000000000000n : 0n); n.WIDTH = 16; return n; },
EAX :function() { var n = this[0]; n = (n & 0xFFFFFFFFn) | (this.EXPAND_SIGN && (n & 0x80000000n) ? 0xFFFFFFFF00000000n : 0n); n.WIDTH = 8; return n; },
AX :function() { var n = this[0]; n = (n & 0xFFFFn) | (this.EXPAND_SIGN && (n & 0x8000n) ? 0xFFFFFFFFFFFF0000n : 0n); n.WIDTH = 4; return n; },
AL :function() { var n = this[0]; n = (n & 0xFFn) | (this.EXPAND_SIGN && (n & 0x80n) ? 0xFFFFFFFFFFFFFF00n : 0n); n.WIDTH = 2; return n; },
AH :function() { var n = this[0] >> 8n; n = (n & 0xFFn) | (this.EXPAND_SIGN && (n & 0x80n) ? 0xFFFFFFFFFFFFFF00n : 0n); n.WIDTH = 2; return n; },
RBX :function() { var n = this[3]; n = (n & 0xFFFFFFFFFFFFFFFFn) | (this.EXPAND_SIGN && (n & 0x8000000000000000n) ? 0xFFFFFFFFFFFFFFFF0000000000000000n : 0n); n.WIDTH = 16; return n; },
EBX :function() { var n = this[3]; n = (n & 0xFFFFFFFFn) | (this.EXPAND_SIGN && (n & 0x80000000n) ? 0xFFFFFFFF00000000n : 0n); n.WIDTH = 8; return n; },
BX :function() { var n = this[3]; n = (n & 0xFFFFn) | (this.EXPAND_SIGN && (n & 0x8000n) ? 0xFFFFFFFFFFFF0000n : 0n); n.WIDTH = 4; return n; },
BL :function() { var n = this[3]; n = (n & 0xFFn) | (this.EXPAND_SIGN && (n & 0x80n) ? 0xFFFFFFFFFFFFFF00n : 0n); n.WIDTH = 2; return n; },
BH :function() { var n = this[3] >> 8n; n = (n & 0xFFn) | (this.EXPAND_SIGN && (n & 0x80n) ? 0xFFFFFFFFFFFFFF00n : 0n); n.WIDTH = 2; return n; },
RCX :function() { var n = this[1]; n = (n & 0xFFFFFFFFFFFFFFFFn) | (this.EXPAND_SIGN && (n & 0x8000000000000000n) ? 0xFFFFFFFFFFFFFFFF0000000000000000n : 0n); n.WIDTH = 16; return n; },
ECX :function() { var n = this[1]; n = (n & 0xFFFFFFFFn) | (this.EXPAND_SIGN && (n & 0x80000000n) ? 0xFFFFFFFF00000000n : 0n); n.WIDTH = 8; return n; },
CX :function() { var n = this[1]; n = (n & 0xFFFFn) | (this.EXPAND_SIGN && (n & 0x8000n) ? 0xFFFFFFFFFFFF0000n : 0n); n.WIDTH = 4; return n; },
CL :function() { var n = this[1]; n = (n & 0xFFn) | (this.EXPAND_SIGN && (n & 0x80n) ? 0xFFFFFFFFFFFFFF00n : 0n); n.WIDTH = 2; return n; },
CH :function() { var n = this[1] >> 8n; n = (n & 0xFFn) | (this.EXPAND_SIGN && (n & 0x80n) ? 0xFFFFFFFFFFFFFF00n : 0n); n.WIDTH = 2; return n; },
RDX :function() { var n = this[2]; n = (n & 0xFFFFFFFFFFFFFFFFn) | (this.EXPAND_SIGN && (n & 0x8000000000000000n) ? 0xFFFFFFFFFFFFFFFF0000000000000000n : 0n); n.WIDTH = 16; return n; },
EDX :function() { var n = this[2]; n = (n & 0xFFFFFFFFn) | (this.EXPAND_SIGN && (n & 0x80000000n) ? 0xFFFFFFFF00000000n : 0n); n.WIDTH = 8; return n; },
DX :function() { var n = this[2]; n = (n & 0xFFFFn) | (this.EXPAND_SIGN && (n & 0x8000n) ? 0xFFFFFFFFFFFF0000n : 0n); n.WIDTH = 4; return n; },
DL :function() { var n = this[2]; n = (n & 0xFFn) | (this.EXPAND_SIGN && (n & 0x80n) ? 0xFFFFFFFFFFFFFF00n : 0n); n.WIDTH = 2; return n; },
DH :function() { var n = this[2] >> 8n; n = (n & 0xFFn) | (this.EXPAND_SIGN && (n & 0x80n) ? 0xFFFFFFFFFFFFFF00n : 0n); n.WIDTH = 2; return n; },
SIGNED :function() { this.EXPAND_SIGN = true; return this; }
};
for(var fn in X64_getters)
BigUint64Array.prototype.__defineGetter__(fn, X64_getters[fn]);
var X64 = new BigUint64Array(16);
X64[0] = 0xABCDEF0123456789n;
X64[1] = 0x7654321089ABCDEFn;
X64[2] = 0xF7E6D5C4B3A29180n;
X64[3] = 0xF0E1D2C3B4A59687n;
function main() {
var Widths = {
RAX :16,
EAX :8,
AX :4,
AH :2,
AL :2,
RCX :16,
ECX :8,
CX :4,
CH :2,
CL :2,
RDX :16,
EDX :8,
DX :4,
DH :2,
DL :2,
RBX :16,
EBX :8,
BX :4,
BH :2,
BL :2
};
var hTable = document.getElementsByTagName("table")[0];
var hCells;
var row, cell, regId, reg, sreg, width, content, flag, x64;
for(row = 0; row < hTable.rows.length; ++ row) {
hCells = hTable.rows[row].cells;
for(cell = 0; cell < hCells.length; ++ cell) {
hCells[cell].style.width = "100%";
hCells[cell].style.textAlign = "center";
if("reg" in hCells[cell].dataset) {
regId = hCells[cell].dataset.reg.toUpperCase();
if(regId in X64) {
reg = X64[regId];
// Если тут не создать копию массива,
sreg = (new BigUint64Array(X64)).SIGNED[regId];
// опция SIGNED распространится не только на текущий момент чтения sreg - временно,
// а на весь массив безвременно
// sreg = X64.SIGNED[regId]; // Вот так - не работает: SIGNED установится насовсем!
width = reg.WIDTH;
flag = isFinite(width);
if(!flag)
width = regId in Widths ? Widths[regId] : 16;
content = [];
content.push("0".repeat(32) + reg.toString(16));
content.push("0".repeat(32) + sreg.toString(16));
hCells[cell].textContent = regId + ":" + (content[0].substr(-width * 2) + "/" + content[1].substr(-width * 2)).toUpperCase() + (flag ? "" : " !!!");
} else
hCells[cell].textContent = "???";
}
}
}
}
</script>
</head>
<body onload='main()'>
<table style=white-space:pre>
<tr><td colspan=8 data-reg=RAX></td></tr>
<tr><td colspan=4>---</td><td colspan=4 data-reg=EAX></td></tr>
<tr><td colspan=6>---</td><td colspan=2 data-reg=AX></td></tr>
<tr><td colspan=6>---</td><td data-reg=AH></td><td data-reg=AL></td></tr>
<tr><td colspan=8 data-reg=RCX></td></tr>
<tr><td colspan=4>---</td><td colspan=4 data-reg=ECX></td></tr>
<tr><td colspan=6>---</td><td colspan=2 data-reg=CX></td></tr>
<tr><td colspan=6>---</td><td data-reg=CH></td><td data-reg=CL></td></tr>
<tr><td colspan=8 data-reg=RDX></td></tr>
<tr><td colspan=4>---</td><td colspan=4 data-reg=EDX></td></tr>
<tr><td colspan=6>---</td><td colspan=2 data-reg=DX></td></tr>
<tr><td colspan=6>---</td><td data-reg=DH></td><td data-reg=DL></td></tr>
<tr><td colspan=8 data-reg=RBX></td></tr>
<tr><td colspan=4>---</td><td colspan=4 data-reg=EBX></td></tr>
<tr><td colspan=6>---</td><td colspan=2 data-reg=BX></td></tr>
<tr><td colspan=6>---</td><td data-reg=BH></td><td data-reg=BL></td></tr>
</table>
</body>
Как видно, всюду - восклицательные знаки. Признак того, что ширину слова приходится читать из таблицы - getter её не передаёт.
А ещё прроблема - необходимость копировать массив из-за безвременного действия опции SIGNED.
Что я не понимаю и делаю не так?