Показать сообщение отдельно
  #13 (permalink)  
Старый 27.07.2022, 19:43
Аватар для Alikberov
Кандидат Javascript-наук
Отправить личное сообщение для Alikberov Посмотреть профиль Найти все сообщения от Alikberov
 
Регистрация: 16.08.2018
Сообщений: 112

Eсть вот такой вопрос.

Вот часть кода:
const	X64_getters	= {
		RAX	:function() { var n = this[0]; n.WIDTH = 64; return n; },
		EAX	:function() { var n = this[0]; n = (n & 0xFFFFFFFFn) | (this.SIGNED && (n & 0x80000000n) ? 0xFFFFFFFF00000000n : 0n); n.WIDTH = 32; return n; },
		AX	:function() { var n = this[0]; n = (n & 0xFFFFn) | (this.SIGNED && (n & 0x8000n) ? 0xFFFFFFFFFFFF0000n : 0n); n.WIDTH = 16; return n; },
		AL	:function() { var n = this[0]; n = (n & 0xFFn) | (this.SIGNED && (n & 0x80n) ? 0xFFFFFFFFFFFFFF00n : 0n); n.WIDTH = 8; return n; },
		AH	:function() { var n = this[0] >> 8n; n = (n & 0xFFn) | (this.SIGNED && (n & 0x80n) ? 0xFFFFFFFFFFFFFF00n : 0n); n.WIDTH = 8; return n; },
		SIGNED	:function() { this.SIGNED = true; return this; }
	};

for(var fn in X64_getters)
	BigUint64Array.prototype.__defineGetter__(fn, X64_getters[fn]);
Почему здесь попутный флаг SIGNED работает и передаётся внутрь функции, а вот ответное свойство WIDTH никак дальше не передаётся?
Сейчас WIDTH мне необходимо как-то ввести для всё тех же операций с регистрами, так как необходимо знать ширину по имени регистра (сейчас это работает через имя регистра в строке с проверкой через switch-case, что не очень хорошо!)
Ответить с цитированием