<?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:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>coding &#187; intel</title>
	<atom:link href="http://www.coding.com.br/tag/intel/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.coding.com.br</link>
	<description>have you coded today?</description>
	<lastBuildDate>Fri, 23 Jul 2010 02:37:02 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Byte Order</title>
		<link>http://www.coding.com.br/programacao/byte-order/</link>
		<comments>http://www.coding.com.br/programacao/byte-order/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 22:03:58 +0000</pubDate>
		<dc:creator>Tiago Maluta</dc:creator>
				<category><![CDATA[programação]]></category>
		<category><![CDATA[arm]]></category>
		<category><![CDATA[intel]]></category>

		<guid isPermaLink="false">http://www.coding.com.br/?p=162</guid>
		<description><![CDATA[In the book about Linux Kernel Programming the author Robert Love demonstrated a trick to check your hardware endianness.

int x = 1;
if &#40;*&#40;char *&#41;&#38;x == 1&#41;
/* little endian */
else
/* big endian */

Using GCC you can use -mbig-endian or -mlittle-endian to generate appropriate endianess. Remember to check man pages section on your architecture (i.e: i386 and [...]]]></description>
			<content:encoded><![CDATA[<p>In the book about <em>Linux Kernel Programming</em> the author<em> Robert Love</em> demonstrated a trick to check your hardware <em>endianness</em>.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">int</span> x <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&amp;</span>x <span style="color: #339933;">==</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span>
<span style="color: #808080; font-style: italic;">/* little endian */</span>
<span style="color: #b1b100;">else</span>
<span style="color: #808080; font-style: italic;">/* big endian */</span></pre></div></div>

<p style="text-align: justify;">Using <a href="http://gcc.gnu.org">GCC</a> you can use <strong>-mbig-endian </strong>or <strong>-mlittle-endian</strong> to generate appropriate endianess. Remember to check man pages section on your architecture (i.e: i386 and x86-64 <span style="text-decoration: underline;">don&#8217;t</span> implement this option whilst IA-64 and ARM yes)</p>
<p style="text-align: justify;">One interesting point regards on byte swapping. Suppose that you have a file that starts with 0x<span style="color: #ff0000;">aabb</span><span style="color: #000080;">ccdd</span> referring to little endian and 0x<span style="color: #000080;">ddcc</span><span style="color: #ff0000;">bbaa</span> referring to big endian (note that I took these values and order arbitrarily). In order to use one kind of byte order in your code we need check what endianness your file was generated and if necessary rectify. This C++ code exemplifies.</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">class</span> Endian <span style="color: #008000;">&#123;</span>
&nbsp;
     <span style="color: #0000ff;">int</span> _byteSwapped<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
&nbsp;
     Endian<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">long</span> dw<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
&nbsp;
        <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>0xaabbccddL <span style="color: #000080;">==</span> dw<span style="color: #008000;">&#41;</span> _byteSwapped <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
        <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>0xddccbbaaL <span style="color: #000080;">==</span> dw<span style="color: #008000;">&#41;</span>  _byteSwapped <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> 
        <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">throw</span> <span style="color: #FF0000;">&quot;error&quot;</span><span style="color: #008080;">;</span>
&nbsp;
     <span style="color: #008000;">&#125;</span>
&nbsp;
     <span style="color: #0000ff;">long</span> rectify<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">long</span> dw<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">const</span> <span style="color: #008000;">&#123;</span>
&nbsp;
        <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>_byteSwapped<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span> dw<span style="color: #008080;">;</span>
        <span style="color: #0000ff;">char</span> result<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">4</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#123;</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">char</span><span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;</span>dw<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #008000;">&#93;</span>,<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">char</span><span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;</span>dw<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span>,<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">char</span><span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;</span>dw<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>,<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">char</span><span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;</span>dw<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
        <span style="color: #0000ff;">return</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">long</span><span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span> result<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
     <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span></pre></div></div>

<p>Another way to do byte swapping is using an macro. The following example swap two bytes:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#define SwapTwoBytes(data) ( (((data) &gt;&gt; 8) &amp; 0x00FF) | (((data) &lt;&lt; 8) &amp; 0xFF00) )</span></pre></div></div>

<p style="text-align: justify;">One of the best practices is provide one software that will work correctly no matter which processor Endian-architecture the code is executed on, eliminating the need to rewrite the code. Intel has a interesting <a href="http://www.intel.com/design/intarch/papers/endian.pdf">paper</a> on Converting Endian-specific to Endian-neutral Code (pg. 15-16).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.coding.com.br/programacao/byte-order/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Depurando programas em assembly no GNU/Linux (parte 1)</title>
		<link>http://www.coding.com.br/programacao/depurando-programas-em-assembly-no-gnulinux-parte-1/</link>
		<comments>http://www.coding.com.br/programacao/depurando-programas-em-assembly-no-gnulinux-parte-1/#comments</comments>
		<pubDate>Mon, 28 Sep 2009 02:41:03 +0000</pubDate>
		<dc:creator>Tiago Maluta</dc:creator>
				<category><![CDATA[programação]]></category>
		<category><![CDATA[assembly]]></category>
		<category><![CDATA[gdb]]></category>
		<category><![CDATA[intel]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[nasm]]></category>
		<category><![CDATA[x86]]></category>

		<guid isPermaLink="false">http://www.coding.com.br/?p=276</guid>
		<description><![CDATA[Embora eu particularmente prefira a sintaxe AT&#38;T à Intel. Estou tendo que aprender a usá-la (e bem). Para os estudos optei pelo NASM, GNU ld e o GDB. Um processo simples, descrito abaixo:
#nasm -g -f elf programa.asm 
#ld programa.o
#gdb -q a.out
Vamos fazer um pequeno programa teste que carrega no registro ecx o valor da variável [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Embora eu particularmente <a href="http://www.ibm.com/developerworks/linux/library/l-gas-nasm.html">prefira</a> a sintaxe AT&amp;T à Intel. Estou <a href="http://www.unifei.edu.br">tendo</a> que aprender a usá-la (e bem). Para os estudos optei pelo <a href="http://www.nasm.us/">NASM</a>, <a href="http://www.gnu.org/software/binutils/">GNU ld</a> e o <a href="http://www.gnu.org/software/gdb/">GDB</a>. Um processo simples, descrito abaixo:</p>
<p style="padding-left: 30px;">#<strong>nasm</strong> -g -f elf <span style="color: #000000;">programa.asm </span><br />
#<strong>ld</strong> <span style="color: #000000;">programa.o</span><br />
#<strong>gdb</strong> -q <span style="color: #000000;">a.out</span></p>
<p>Vamos fazer um pequeno programa teste que carrega no registro <em>ecx</em> o valor da variável (var1) e em <em>edx</em> seu endereço:</p>

<div class="wp_syntax"><div class="code"><pre class="asm" style="font-family:monospace;">section <span style="color: #000000; font-weight: bold;">.data</span>
&nbsp;
   var1 <span style="color: #000000; font-weight: bold;">dd</span> <span style="color: #0000ff;">40</span>
&nbsp;
section <span style="color: #339933;">.</span>text
&nbsp;
   global _start
&nbsp;
   _start<span style="color: #339933;">:</span>
      <span style="color: #00007f; font-weight: bold;">nop</span>
      <span style="color: #00007f; font-weight: bold;">nop</span>
      <span style="color: #00007f; font-weight: bold;">mov</span>   <span style="color: #00007f;">ecx</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>var1<span style="color: #009900; font-weight: bold;">&#93;</span>
      <span style="color: #00007f; font-weight: bold;">lea</span>   <span style="color: #00007f;">edx</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>var1<span style="color: #009900; font-weight: bold;">&#93;</span>
&nbsp;
   _exit<span style="color: #339933;">:</span>
      <span style="color: #00007f; font-weight: bold;">mov</span>   <span style="color: #00007f;">eax</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">1</span>
      <span style="color: #00007f; font-weight: bold;">int</span>   <span style="color: #0000ff;">80h</span></pre></div></div>

<p>Dentro do gdb:</p>
<pre>(gdb) break 11
Breakpoint 1 at 0x80480a1: file teste.asm, line 11.
(gdb) r
Starting program: /home/maluta/coding/a.out
Breakpoint 1, _start () at teste.asm:11
11            nop
(gdb) print var1
$1 = 40
(gdb) info registers ecx edx
ecx            0x0      0
edx            0x0      0</pre>
<p>Adicionamos um <a href="http://sourceware.org/gdb/current/onlinedocs/gdb_6.html#SEC34">breakpoint</a> (eu precisei inserir duas instruções <em>nop</em> para o gdb realmente para no ponto) e verificamos os valores de <strong>var1</strong>, <strong>ecx</strong> e <strong>edx</strong>.</p>
<pre>(gdb) si
_start () at teste.asm:12
12            mov   ecx, [var1]
(gdb) si
_start () at teste.asm:13
13            lea   edx, [var1]
(gdb) info registers ecx
ecx            0x28     40
(gdb) si
_exit () at teste.asm:16
16            mov   eax, 1
(gdb) info registers edx
edx            0x80490b8        134516920</pre>
<p>E por fim, verificamos o conteúdo no endereço definido em edx.</p>
<pre>(gdb) print *0x80490b8
$2 = 40</pre>
<p style="text-align: justify;">Algumas considerações:</p>
<ul style="text-align: justify;">
<li style="text-align: justify;">O <a href="http://www.gnu.org/software/ddd/">Data Diplay Debugger</a> (DDD) é um <em>front-end</em> muito bom para o GDB que pode ser utilizado ao invés da interface de linha de comando.</li>
</ul>
<ul style="text-align: justify;">
<li style="text-align: justify;">O após <em>label</em> <strong>_exit </strong>há uma chamada a uma <em>syscall</em> (adivinha qual?) do <a href="http://www.kernel.org">kernel</a>. Passa-se o valor (no registro eax) e chama uma interrupção (80h).  A verdadeira &#8220;diversão&#8221; está em associar essas syscalls (write, fork, execve, &#8230;) mas isto é para outro <em>post</em>&#8230; Por enquanto vou lidar com os diferentes modos de endereçamento e operações lógicas e aritméticas.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.coding.com.br/programacao/depurando-programas-em-assembly-no-gnulinux-parte-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Baixo Desempenho Intel Ubuntu 9.04</title>
		<link>http://www.coding.com.br/ubuntu/baixo-desempenho-intel-ubuntu-904/</link>
		<comments>http://www.coding.com.br/ubuntu/baixo-desempenho-intel-ubuntu-904/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 12:30:00 +0000</pubDate>
		<dc:creator>Celso Fernandes</dc:creator>
				<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[9.04]]></category>
		<category><![CDATA[configuração]]></category>
		<category><![CDATA[intel]]></category>
		<category><![CDATA[regressão]]></category>

		<guid isPermaLink="false">http://www.coding.com.br/?p=4</guid>
		<description><![CDATA[Já tentou as dicas para o problema de regressão de desempenho das placas intel (driver: intel) no Ubuntu 9.04 e mesmo assim continua com baixo desempenho?
tente adicionar a linha Option      &#8220;XAANoOffscreenPixmaps&#8221;, na sua section &#8220;Device&#8221;, ficando assim:
Section &#8220;Device&#8221;
Identifier  &#8220;Configured Video Device&#8221;
Option      &#8220;XAANoOffscreenPixmaps&#8221;
EndSection
meu glxgears (sim, [...]]]></description>
			<content:encoded><![CDATA[<p>Já tentou as dicas para o problema de regressão de desempenho das placas intel (driver: intel) no Ubuntu 9.04 e mesmo assim continua com baixo desempenho?</p>
<p>tente adicionar a linha Option      &#8220;XAANoOffscreenPixmaps&#8221;, na sua section &#8220;Device&#8221;, ficando assim:</p>
<p><em>Section &#8220;Device&#8221;<br />
Identifier  &#8220;Configured Video Device&#8221;<br />
Option      &#8220;XAANoOffscreenPixmaps&#8221;<br />
EndSection</em></p>
<p>meu glxgears (sim, apesar de não ser tãooo confiável ajuda como métrica), subiu de 150FPS para 500FPS em uma Intel Corporation Mobile 945GM.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.coding.com.br/ubuntu/baixo-desempenho-intel-ubuntu-904/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
