<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; MMX Симулятор]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=17255</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=17255&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «MMX Симулятор».]]></description>
		<lastBuildDate>Tue, 19 Jul 2022 18:07:46 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[MMX Симулятор]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=153964#p153964</link>
			<description><![CDATA[<p>Всe, кто чуточку знаком с отладкой кода на низком уровне с помощью <a href="https://www.ollydbg.de/">OllyDbg</a> или в MS Visual Studio, знает, сколько нервов отнимает концентрация на конкретной проблемной инструкции кода, когда пытаешься предугадать последующее состояние всех регистров, опасаясь сделать лишний шаг и упустить ключевую проблемную инструкцию. Так как подавляющее большинство не предусматривают отката контекста процессора назад, даже на несколько единиц команд.</p><p>Нa просторах всемирной сети можно найти множество интересных простейших утилит, работающих прямо на странице браузера и не требующих установки.<br /></p><ul><li><p><a href="https://carlosrafaelgn.com.br/Asm86/">Бразильский отладчик ассемблера (не знает инструкции shrd)</a></p></li><li><p><a href="https://digitaljs.tilk.eu/">Визуальный Yosys симулятор</a></p></li><li><p><a href="https://wavedrom.com/">Редактор временных диаграмм</a></p></li></ul><p>Конечно, есть более функциональные профессиональные средства, но они требуют регистрации или предлагают ознакомительный ограниченный сервис.</p><p>Решил я для собственных потребностей набросать простенький движок по отладке узких мест в MMX-цепочках, так как в том же «Visual Studio» всегда не хватало <em>отката</em> во времени значений регистров.</p><p>Предлагаемый здесь отладчик (<a href="https://gistpreview.github.io/?9b26f6e254c372b9b70b93e6e3221805"><strong>ссылка</strong></a>) не является полноценным ассемблером/эмулятором x86-архитектуры, а лишь собирает журнал изменения регистров (контекст процессора) построчно.<br />Тем самым, перемещая каретку по строкам листинга, в окошках с регистрами «x64»/«MMX»/«SSE» и «Canvas» синхронно будут отображаться все изменения, соответствующие действию конкретной инструкции на конкретной строке…</p><p>Интерфейс утилиты разрабатывался с максимальным акцентом на журналирование всего. Так, открытые пункты меню и выбранный стиль после перезагрузки страницы активируются вновь. Сохраняется содержимое редактируемого листинга (при условии наличия метки «revision ДАТА») и позиция каретки / выделение в нём.<br />Имеется поддержка подгрузки внешних листингов и стилей (<a href="https://gistpreview.github.io/?9b26f6e254c372b9b70b93e6e3221805#gist=https://gist.githubusercontent.com/Alikberov/2997cb772376829eec4620bb28ef0404/raw/c2843dea355653055ec1f75072d4f5b4cf14495d/mmx-sim-css.asm">ссылка на пример подгрузки вырви глаз стиля №10</a>), которые также можно редактировать (двойной клик по любому пункту меню стилей загружает их в редактор).</p><p>Псевдо-ассемблер имеет собственные особенности и не транслирует текст инструкций в промежуточный псевдо-код, а симулирует исполнение сам на месте. Тем самым, имеются жёсткие ограничения на операциях работы с ОЗУ (которого нет) и циклы.<br /></p><ul><li><p>«MOVQ MM1,[high],[low]» имеет два указателя на переменные «high» и «low», которые загружаются в старшую и младшую половины соответственно. Это может быть полезным исключительно для предварительной инициализации регистров. Трюк работает со всеми операциями включительно</p></li><li><p>«.LOG &quot;Any remark or comment&quot;» заносит в журнал любую ремарку или комментарий</p></li><li><p>«.LOG &quot;Specific for_mat_for_mmx_regs» предопределяет форматированный вывод MMX-регистров и заносит запись в журнал</p></li><li><p>«.LOG MM1» или «.LOG MM1,&quot;Specific for_mat_for_mmx_regs&quot;» печатает значение MMX-регистра, разделяя его шестнадцатеричные разряды знаком подчёркивания в указанных позициях</p></li><li><p>«.LOG CLEAR» очищает журнал</p></li><li><p>«.REPEAT» задаёт позицию начала макроцикла</p></li><li><p>«.REPEAT constant» или «.REPEAT variable» с числовой константой или именем переменной производит очередную итерацию макроцикла, пока их количество не достигнет определённой величины</p></li><li><p>«.CANVAS CLEAR» очищает графический холст</p></li><li><p>«.CANVAS MM1» ставит на графическом холсте очередной пиксель в позиции, определяемой в младших 16-битных словах рагистра MM1 как «X=LOWORD(MM1)» и «Y=HIWORD(MM1)», используя цвет из старших 32 бит MM1</p></li><li><p>«.CANVAS MM1,width» ставит на графическом холсте очередной пиксель в позиции, определяемой в младшем 32-битном слове регистра MM1 как виртуальный вектор на адрес пикселя в видеобуфере, с шириной строки, определяемой величиной width</p></li></ul><p>Позицией <em>ползунка</em> можно выбирать конкретную итерацию макроцикла и отслеживать показания регистров в конкретный момент.<br />Зажимая клавиши «Home»/«End» в любом месте листинга можно прокручивать позицию <em>ползунка</em> и отслеживать историю отрабатывания инструкций внутри каждой итерации макроцикла…</p><p><em>P.S.:</em> Движок регулярно дорабатывается и дополняется.<br />Ограниченная поддержка инструкций обуславливается пониженным спросом на подобные инструменты и достаточной функциональностью для моих персональных нудж.</p>]]></description>
			<author><![CDATA[null@example.com (Alikberov)]]></author>
			<pubDate>Tue, 19 Jul 2022 18:07:46 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=153964#p153964</guid>
		</item>
	</channel>
</rss>
