 
			
				28.07.2022, 15:49
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 03.02.2020 
					
					
					
						Сообщений: 2,777
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Ну я же спрашивал не про let n = new Number(42), а про let n = 42; 
Хотя примитивный тип и обертка, ведут себя во многих случаях похоже, но все время приходится помнить, что это только обертка, и с ней нельзя делать все тоже, что и с примитивным значением. 
 
например не проскочит (из вашего примера) 
var Man = new Number(1536); 
Man += 1; 
Попробуйте выполнить все дальнейшее. 
 
Если Вас устроит подобная обертка для BigInt, то она, оказывается существует. 
Нельзя сделать, по аналогии с Number, new BigInt(x) 
Но можно Object(BigInt(x)) 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				28.07.2022, 17:00
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Кандидат Javascript-наук 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 16.08.2018 
					
					
					
						Сообщений: 113
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				Теперь работает всё как и планировалось!
			 
			
		
		
		
		
	
 
	
		
			Сообщение от voraa
			 
		
	 | 
 
	
		Ну я же спрашивал не про let n = new Number(42), а про let n = 42; 
Хотя примитивный тип и обертка, ведут себя во многих случаях похоже, но все время приходится помнить, что это только обертка, и с ней нельзя делать все тоже, что и с примитивным значением. 
 
например не проскочит (из вашего примера) 
var Man = new Number(1536); 
Man += 1; 
Попробуйте выполнить все дальнейшее.
	 | 
 
	
 
 Ну, как бы верно: Мне нужны временные свойства-флаги. 
	
 
	
		
			Сообщение от voraa
			 
		
	 | 
 
	
		Если Вас устроит подобная обертка для BigInt, то она, оказывается существует. 
Нельзя сделать, по аналогии с Number, new BigInt(x) 
Но можно Object(BigInt(x))
	 | 
 
	
 
 А вот это - помогло! 
<html>
<head>
<script>
const	X64_getters	= {
		RAX	:function() { var n = this[0]; n = new Object(BigInt((n & 0xFFFFFFFFFFFFFFFFn) | (this.EXPAND_SIGN && (n & 0x8000000000000000n) ? 0xFFFFFFFFFFFFFFFF0000000000000000n : 0n))); n.WIDTH = 16; this.EXPAND_SIGN = false; return n; },
		EAX	:function() { var n = this[0]; n = new Object(BigInt((n & 0xFFFFFFFFn) | (this.EXPAND_SIGN && (n & 0x80000000n) ? 0xFFFFFFFF00000000n : 0n))); n.WIDTH = 8; this.EXPAND_SIGN = false; return n; },
		AX	:function() { var n = this[0]; n = new Object(BigInt((n & 0xFFFFn) | (this.EXPAND_SIGN && (n & 0x8000n) ? 0xFFFFFFFFFFFF0000n : 0n))); n.WIDTH = 4; this.EXPAND_SIGN = false; return n; },
		AL	:function() { var n = this[0]; n = new Object(BigInt((n & 0xFFn) | (this.EXPAND_SIGN && (n & 0x80n) ? 0xFFFFFFFFFFFFFF00n : 0n))); n.WIDTH = 2; this.EXPAND_SIGN = false; return n; },
		AH	:function() { var n = this[0] >> 8n; n = new Object(BigInt((n & 0xFFn) | (this.EXPAND_SIGN && (n & 0x80n) ? 0xFFFFFFFFFFFFFF00n : 0n))); n.WIDTH = 2; this.EXPAND_SIGN = false; return n; },
		RBX	:function() { var n = this[3]; n = new Object(BigInt((n & 0xFFFFFFFFFFFFFFFFn) | (this.EXPAND_SIGN && (n & 0x8000000000000000n) ? 0xFFFFFFFFFFFFFFFF0000000000000000n : 0n))); n.WIDTH = 16; this.EXPAND_SIGN = false; return n; },
		EBX	:function() { var n = this[3]; n = new Object(BigInt((n & 0xFFFFFFFFn) | (this.EXPAND_SIGN && (n & 0x80000000n) ? 0xFFFFFFFF00000000n : 0n))); n.WIDTH = 8; this.EXPAND_SIGN = false; return n; },
		BX	:function() { var n = this[3]; n = new Object(BigInt((n & 0xFFFFn) | (this.EXPAND_SIGN && (n & 0x8000n) ? 0xFFFFFFFFFFFF0000n : 0n))); n.WIDTH = 4; this.EXPAND_SIGN = false; return n; },
		BL	:function() { var n = this[3]; n = new Object(BigInt((n & 0xFFn) | (this.EXPAND_SIGN && (n & 0x80n) ? 0xFFFFFFFFFFFFFF00n : 0n))); n.WIDTH = 2; this.EXPAND_SIGN = false; return n; },
		BH	:function() { var n = this[3] >> 8n; n = new Object(BigInt((n & 0xFFn) | (this.EXPAND_SIGN && (n & 0x80n) ? 0xFFFFFFFFFFFFFF00n : 0n))); n.WIDTH = 2; this.EXPAND_SIGN = false; return n; },
		RCX	:function() { var n = this[1]; n = new Object(BigInt((n & 0xFFFFFFFFFFFFFFFFn) | (this.EXPAND_SIGN && (n & 0x8000000000000000n) ? 0xFFFFFFFFFFFFFFFF0000000000000000n : 0n))); n.WIDTH = 16; this.EXPAND_SIGN = false; return n; },
		ECX	:function() { var n = this[1]; n = new Object(BigInt((n & 0xFFFFFFFFn) | (this.EXPAND_SIGN && (n & 0x80000000n) ? 0xFFFFFFFF00000000n : 0n))); n.WIDTH = 8; this.EXPAND_SIGN = false; return n; },
		CX	:function() { var n = this[1]; n = new Object(BigInt((n & 0xFFFFn) | (this.EXPAND_SIGN && (n & 0x8000n) ? 0xFFFFFFFFFFFF0000n : 0n))); n.WIDTH = 4; this.EXPAND_SIGN = false; return n; },
		CL	:function() { var n = this[1]; n = new Object(BigInt((n & 0xFFn) | (this.EXPAND_SIGN && (n & 0x80n) ? 0xFFFFFFFFFFFFFF00n : 0n))); n.WIDTH = 2; this.EXPAND_SIGN = false; return n; },
		CH	:function() { var n = this[1] >> 8n; n = new Object(BigInt((n & 0xFFn) | (this.EXPAND_SIGN && (n & 0x80n) ? 0xFFFFFFFFFFFFFF00n : 0n))); n.WIDTH = 2; this.EXPAND_SIGN = false; return n; },
		RDX	:function() { var n = this[2]; n = new Object(BigInt((n & 0xFFFFFFFFFFFFFFFFn) | (this.EXPAND_SIGN && (n & 0x8000000000000000n) ? 0xFFFFFFFFFFFFFFFF0000000000000000n : 0n))); n.WIDTH = 16; this.EXPAND_SIGN = false; return n; },
		EDX	:function() { var n = this[2]; n = new Object(BigInt((n & 0xFFFFFFFFn) | (this.EXPAND_SIGN && (n & 0x80000000n) ? 0xFFFFFFFF00000000n : 0n))); n.WIDTH = 8; this.EXPAND_SIGN = false; return n; },
		DX	:function() { var n = this[2]; n = new Object(BigInt((n & 0xFFFFn) | (this.EXPAND_SIGN && (n & 0x8000n) ? 0xFFFFFFFFFFFF0000n : 0n))); n.WIDTH = 4; this.EXPAND_SIGN = false; return n; },
		DL	:function() { var n = this[2]; n = new Object(BigInt((n & 0xFFn) | (this.EXPAND_SIGN && (n & 0x80n) ? 0xFFFFFFFFFFFFFF00n : 0n))); n.WIDTH = 2; this.EXPAND_SIGN = false; return n; },
		DH	:function() { var n = this[2] >> 8n; n = new Object(BigInt((n & 0xFFn) | (this.EXPAND_SIGN && (n & 0x80n) ? 0xFFFFFFFFFFFFFF00n : 0n))); n.WIDTH = 2; this.EXPAND_SIGN = false; 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,
			RDX	:16,
			EDX	:8,
			DX	:4,
			DH	:2,
			DL	: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 = X64.SIGNED[regId];
					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>
Спасибо!:t  hanks: 
 P.S.: Правда, напрягает громоздкость и рутинность описания всех методов таким образом… 
Но, я сам выбрал такой путь…   
		
	
		
		
		
		
		
		
	
		
			
			
	
			
			
			
			
			
				 
			
			
			
			
			
			
				
			
			
			
		 
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				28.07.2022, 20:05
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 03.02.2020 
					
					
					
						Сообщений: 2,777
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Если добавить 
BigUint64Array.prototype._retval = function (n, w) {
   let v = Object(BigInt(n));
   v.WIDTH = w;
   this.EXPAND_SIGN = false;
   return v;
}
То можно подсократить код
 
RAX :function() { var n = this[0]; n = (n & 0xFFFFFFFFFFFFFFFFn) | (this.EXPAND_SIGN && (n & 0x8000000000000000n) ? 0xFFFFFFFFFFFFFFFF0000000000000000n : 0n); return this._retval(n, 16); },
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				28.07.2022, 21:01
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Кандидат Javascript-наук 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 16.08.2018 
					
					
					
						Сообщений: 113
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от voraa
			 
		
	 | 
 
	
		Если добавить 
То можно подсократить код
	 | 
 
	
 
 A производительность!?   
С одной стороны - мой код и гроша не стоит, да и писал для себя. 
Но с другой - это же не очень хорошая практика плодить сущности!   
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				28.07.2022, 22:37
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 03.02.2020 
					
					
					
						Сообщений: 2,777
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от Alikberov
			
		
	 | 
 
	| 
		A производительность!?
	 | 
 
	
 
 Вызов одной функции по сравнению со всем остальным? 
	
 
	| 
		
			Сообщение от Alikberov
			
		
	 | 
 
	| 
		Но с другой - это же не очень хорошая практика плодить сущности!
	 | 
 
	
 
 Вы их уже столько наплодили. 
Хорошей практикой было бы вообще не курочить прототипы встроенных объектов (это, кстати сказывается на производительности), а создать класс - наследник от BigUint64Array и все новые методы, геттеры и сеттеры определять в нем.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				29.07.2022, 00:00
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Кандидат Javascript-наук 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 16.08.2018 
					
					
					
						Сообщений: 113
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от voraa
			 
		
	 | 
 
	| 
		Вызов одной функции по сравнению со всем остальным?
	 | 
 
	
 
 Тeг за тегом, функция за функцией… 
Этот код и так из соседнего проекта (титул так и остался) с кучей рудиментов, а тот код - из другого проекта, так как лень парсер листинга с нуля писать. 
В итоге - я уже с трудом разбираюсь. Боюсь поломать.   
	
 
	
		
			Сообщение от voraa
			 
		
	 | 
 
	
		Вы их уже столько наплодили. 
Хорошей практикой было бы вообще не курочить прототипы встроенных объектов (это, кстати сказывается на производительности), а создать класс - наследник от BigUint64Array и все новые методы, геттеры и сеттеры определять в нем.
	 | 
 
	
 
 Тоже вот о классах думаю, благо в JS с ними сейчас стабильнее во всех браузерах. 
Соответственно, и парсер, и симулятор - всё в классы завернуть можно (и нужно)! 
Как только руки дойдут.   
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 
 
 
	 | 
 
 
 |