Здравствуйте, ·, Вы писали:
·>...В общем, неважно, мой поинт в том, что очень часто необходимость выравнивать код по вертикали говорит о том, что code smells и его можно улучшить.
Давай начнём с того, что это не необходимость!? Адекватное форматирование кода просто улучшает читабельность, ВСЕГДА. Притом не важно, форматируешь ли ты код в соотвествии с корпоративным кодстайлом, либо даже вот такое, табличкой.
Далее, здесь ты читаешь оптимизированный код. Смотри: в интеловской документации команда описывается вот
так:
if(OperandSize == 32) {
//Instruction == POPAD
EDI = Pop();
ESI = Pop();
EBP = Pop();
ESP = ESP + 4; //skip next 4 bytes of stack
EBX = Pop();
EDX = Pop();
ECX = Pop();
EAX = Pop();
}
else {
//OperandSize == 16, instruction == POPA
DI = Pop();
SI = Pop();
BP = Pop();
ESP = ESP + 2; //skip next 2 bytes of stack
BX = Pop();
DX = Pop();
CX = Pop();
AX = Pop();
}
Обрати внимание на скип 2-х и 4-х байт в зависимости от размера операнда. Можно было бы написать руками инкремент ESP, и описать функцию POP(). Но в конечном машинном коде тоже был бы инкремент, а в данном месте это КРИТИЧНОЕ замедление: вместо семи операций с индексной адресацией в конечном коде было бы 7 операций с индексной адресацией + один лишний инкремент. Учитывая, что топовые современные камни едва тянут эмуляцию i486['*], такие замедления неприемлимы.
['*] без динамической рекомпиляции эмулятор едва ползает, а с ней почти невозможно соблюсти потактовую точной эмуляции.
Если не гнаться за каждой наносекундой, то можно было бы напихать регистры в список — кода было бы меньше, читалось бы замечательно. Однако эмулятор работал бы ещё медленнее.
·>Я имею в виду наложение маски "& 0xFFFF". Полагаю это извлечение значения для 16-битных команд. Ну так сделай метод с таким названием вроде use16bit.
Попробуй. Код
тут Инструкция по сборке
здесь. Чтобы попробовать, тебе будут нужны ROM'ы, они
тут.
Сабжевый код находится в src/cpu/x86_ops_stack.h
Покажи потом что получилось.
Ф>>необычно.
·>Какой необычный форматтер вы используете?
Лично я ничего не использую. В этом проекте я вообще код в FAR'е пишу, потому что так и не осилил настроить ни одну из сред разрабоки. Честное слово, крыл благим матом все IDE, которые пытался приспособить для этого проекта. А так — кто во что горазд.
Как запретить автоматическое форматирование в VS (не VS Code) не знаю.