<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
					xmlns:content="http://purl.org/rss/1.0/modules/content/"
					xmlns:wfw="http://wellformedweb.org/CommentAPI/"
					xmlns:atom="http://www.w3.org/2005/Atom"
				  >
<channel>
<atom:link rel="self"  type="application/rss+xml"  href="http://rulinux.net/rss_from_sect_4_subsect_6_thread_42671"  />
<title>rulinux.net - Форум - Development -  [assembler] [preprocessor] преобразовать имя регистра в его номер</title>
<link>http://rulinux.net/</link>
<description><![CDATA[Портал о GNU/Linux и не только]]></description>
<image><title>rulinux.net - Форум - Development -  [assembler] [preprocessor] преобразовать имя регистра в его номер</title>
<link>http://rulinux.net/</link>
<url>http://rulinux.net/rss_icon.png</url>
</image>
<item>
<title>Re: [assembler] [preprocessor] преобразовать имя регистра в его номер</title>
<link>https://rulinux.net/message.php?newsid=42671&amp;page=1#217703</link>
<guid>https://rulinux.net/message.php?newsid=42671&amp;page=1#217703</guid>
<pubDate>Fri, 23 Sep 2016 08:46:17 +0300</pubDate>
<description><![CDATA[<p><fieldset><legend>asm</legend><div class="highlight asm"><br />
super_ins <span class="nu0">4</span><br />
super_ins <span class="nu0">5</span><br />
super_ins <span class="nu0">6</span><br />
&nbsp;</div></fieldset><br><br>Не?</p>]]></description>
</item>
<item>
<title>Re: [assembler] [preprocessor] преобразовать имя регистра в его номер</title>
<link>https://rulinux.net/message.php?newsid=42671&amp;page=1#217701</link>
<guid>https://rulinux.net/message.php?newsid=42671&amp;page=1#217701</guid>
<pubDate>Thu, 22 Sep 2016 20:13:26 +0300</pubDate>
<description><![CDATA[<p>Я уже давно далек от ассемблерной тематики,  просто интересно,  это какой то суровый эмбеддед с редким  чипом, что приходится на  асме  напрямую писать ? </p>]]></description>
</item>
<item>
<title>Re: [assembler] [preprocessor] преобразовать имя регистра в его номер</title>
<link>https://rulinux.net/message.php?newsid=42671&amp;page=1#217699</link>
<guid>https://rulinux.net/message.php?newsid=42671&amp;page=1#217699</guid>
<pubDate>Thu, 22 Sep 2016 19:10:56 +0300</pubDate>
<description><![CDATA[<p>&gt; ассемблер
</p>]]></description>
</item>
<item>
<title> [assembler] [preprocessor] преобразовать имя регистра в его номер</title>
<link>https://rulinux.net/message.php?newsid=42671&amp;page=1#217698</link>
<guid>https://rulinux.net/message.php?newsid=42671&amp;page=1#217698</guid>
<pubDate>Thu, 22 Sep 2016 18:54:20 +0300</pubDate>
<description><![CDATA[<p>Компилятор не знает некоторых иструкций процессора. Чтобы вставить их в ассемблерный код я написал макрос, который формирует код нужной инструкции из аргументов. Один из аргументов, который должен попасть в код инструкции - номер регистра. Регистр передается макросу в виде &quot;$N&quot;, где N - собственно номер регистра (N=0..31). Чтобы засунуть его в opcode нужно преобразовать &quot;$N&quot; в &quot;N&quot; и произвести над N арифметическую операцию. Как бы это сделать средствами препроцессора?<br><br>Т.е. хочется как-то так:<br><br> <fieldset><legend>asm</legend><div class="highlight asm"><br />
<br />
#define OP_OFFSET 24<br />
#define REG_OFFSET 16<br />
<br />
#define SUPER_OP 0xbe<br />
<br />
<span class="sy0">.</span><span class="kw4">macro</span> super_ins reg<br />
<span class="sy0">.</span><span class="kw5">word</span> <span class="br0">&#40;</span>SUPER_OP &lt;&lt; OP_OFFSET<span class="br0">&#41;</span> | <span class="br0">&#40;</span>\reg &lt;&lt; REG_OFFSET<span class="br0">&#41;</span><br />
<span class="sy0">.</span><span class="kw4">endm</span><br />
<br />
super_ins $<span class="nu0">4</span><br />
super_ins $<span class="nu0">5</span><br />
super_ins $<span class="nu0">6</span><br />
<br />
&nbsp;</div></fieldset><br><br>Но в этом примере вместо \reg будет подставлено $4 ($5, $6) и компилятор выдаст ошибку. Нужно чтобы вместо $4 подставилось просто 4.<br><br>Пока я сделал по тупому: перекладываем значение из регистра-аргумента во временный регистр $1 и формируем opcode с временным регистром. Но хочется избавиться от лишней инструкции.<br><br> <fieldset><legend>asm</legend><div class="highlight asm"><br />
<br />
<span class="sy0">.</span><span class="kw4">macro</span> super_ins reg<br />
<span class="sy0">.</span>set <span class="kw1">push</span><br />
<span class="sy0">.</span>set noat<br />
<br />
move $1<span class="sy0">,</span> \reg<br />
<span class="sy0">.</span><span class="kw5">word</span> <span class="br0">&#40;</span>SUPER_OP &lt;&lt; OP_OFFSET<span class="br0">&#41;</span> | <span class="br0">&#40;</span>1 &lt;&lt; REG_OFFSET<span class="br0">&#41;</span><br />
<br />
<span class="sy0">.</span>set <span class="kw1">pop</span><br />
<span class="sy0">.</span><span class="kw4">endm</span><br />
<br />
&nbsp;</div></fieldset><br><br>ассемблер mips-linux-gnu-gcc<br><br></p>]]></description>
</item>
</channel>
</rss>