ÿþ<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns="http://www.w3.org/TR/REC-html40"> <head> <meta http-equiv=Content-Type content="text/html; charset=unicode"> <meta name=ProgId content=Word.Document> <meta name=Generator content="Microsoft Word 11"> <meta name=Originator content="Microsoft Word 11"> <link rel=File-List href="lec5%20-%20Intro%20to%20Assembly_files/filelist.xml"> <title>Lecture 2</title> <!--[if gte mso 9]><xml> <o:DocumentProperties> <o:Author>Name</o:Author> <o:LastAuthor>owner</o:LastAuthor> <o:Revision>139</o:Revision> <o:TotalTime>635</o:TotalTime> <o:Created>2005-01-01T01:34:00Z</o:Created> <o:LastSaved>2008-01-07T15:24:00Z</o:LastSaved> <o:Pages>1</o:Pages> <o:Words>2101</o:Words> <o:Characters>11979</o:Characters> <o:Company>Organization</o:Company> <o:Lines>99</o:Lines> <o:Paragraphs>28</o:Paragraphs> <o:CharactersWithSpaces>14052</o:CharactersWithSpaces> <o:Version>11.9999</o:Version> </o:DocumentProperties> </xml><![endif]--><!--[if gte mso 9]><xml> <w:WordDocument> <w:SpellingState>Clean</w:SpellingState> <w:GrammarState>Clean</w:GrammarState> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:Compatibility> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> </w:LatentStyles> </xml><![endif]--> <style> <!-- /* Font Definitions */ @font-face {font-family:Batang; panose-1:2 3 6 0 0 1 1 1 1 1; mso-font-alt:¼ÕÐ; mso-font-charset:129; mso-generic-font-family:auto; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:1 151388160 16 0 524288 0;} @font-face {font-family:"\@Batang"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:129; mso-generic-font-family:auto; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:1 151388160 16 0 524288 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0in; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:Batang;} p.MsoPlainText, li.MsoPlainText, div.MsoPlainText {margin:0in; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Courier New"; mso-fareast-font-family:Batang;} span.SpellE {mso-style-name:""; mso-spl-e:yes;} span.GramE {mso-style-name:""; mso-gram-e:yes;} @page Section1 {size:8.5in 11.0in; margin:1.0in 65.95pt 1.0in 65.95pt; mso-header-margin:.5in; mso-footer-margin:.5in; mso-paper-source:0;} div.Section1 {page:Section1;} /* List Definitions */ @list l0 {mso-list-id:1306468423; mso-list-type:hybrid; mso-list-template-ids:555283378 -1645321360 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l0:level1 {mso-level-tab-stop:.75in; mso-level-number-position:left; margin-left:.75in; text-indent:-.25in;} @list l0:level2 {mso-level-tab-stop:1.0in; mso-level-number-position:left; text-indent:-.25in;} @list l0:level3 {mso-level-tab-stop:1.5in; mso-level-number-position:left; text-indent:-.25in;} @list l0:level4 {mso-level-tab-stop:2.0in; mso-level-number-position:left; text-indent:-.25in;} @list l0:level5 {mso-level-tab-stop:2.5in; mso-level-number-position:left; text-indent:-.25in;} @list l0:level6 {mso-level-tab-stop:3.0in; mso-level-number-position:left; text-indent:-.25in;} @list l0:level7 {mso-level-tab-stop:3.5in; mso-level-number-position:left; text-indent:-.25in;} @list l0:level8 {mso-level-tab-stop:4.0in; mso-level-number-position:left; text-indent:-.25in;} @list l0:level9 {mso-level-tab-stop:4.5in; mso-level-number-position:left; text-indent:-.25in;} ol {margin-bottom:0in;} ul {margin-bottom:0in;} --> </style> <!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin:0in; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} table.MsoTableGrid {mso-style-name:"Table Grid"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; border:solid windowtext 1.0pt; mso-border-alt:solid windowtext .5pt; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-border-insideh:.5pt solid windowtext; mso-border-insidev:.5pt solid windowtext; mso-para-margin:0in; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} </style> <![endif]--><!--[if gte mso 9]><xml> <o:shapedefaults v:ext="edit" spidmax="9218"/> </xml><![endif]--><!--[if gte mso 9]><xml> <o:shapelayout v:ext="edit"> <o:idmap v:ext="edit" data="1"/> </o:shapelayout></xml><![endif]--> </head> <body lang=EN-US style='tab-interval:.5in'> <div class=Section1> <p class=MsoNormal>Lecture 5</p> <p class=MsoNormal>Andreas <span class=SpellE>Moshovos</span></p> <p class=MsoNormal>Spring 2007</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal><b style='mso-bidi-font-weight:normal'>Using the Assembly Programming Language to Write Programs<o:p></o:p></b></p> <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><o:p>&nbsp;</o:p></b></p> <p class=MsoNormal>As we have discussed, internally instructions and data are represented using binary quantities. To aid in programming a machine, however, we commonly use a symbolic representation of instructions and data. This is the <b style='mso-bidi-font-weight:normal'>assembly programming language.</b> Here we explain the conventions used by the assembly programming language used for NIOS-II and the specific tools that you are going to be using for the DE2 or DE1 boards. Different CPUs most likely use different assembly languages. Moreover, there may even been different assembly dialects for the same CPU. The particular language we will describe in based on the popular GNU GCC- and BINUTILS-based tools. This GNU tool-chain can be configured to support several architectures. Some of what we will be describing applies to other architectures also. Some of it may seem unnecessarily complex at this stage. Keep in mind that this tool-chain was developed to support the development of complex programs and operating systems and for several architectures. That s where most of the apparent complexity comes from.</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal>Please go over the lab1 handout which can be found on the course s website as it will give you a more detailed overview of how to program in assembly on the DE2/DE1 system.</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal>The first step in programming is to write in a text file the assembly program. The <b style='mso-bidi-font-weight:normal'>assembly program </b>is a text representation of instructions and memory data values). You have to pass this through the <b style='mso-bidi-font-weight:normal'>assembler. </b>The assembler is a program that parses your assembly program and translates it into its equivalent binary form. It is this binary representation that is then loaded into the computer s memory and gets executed. There are several different formats for this  binary representation . The tools that communicates with the DE2 board knows how interpret these formats and to load your program and data in memory before it is executed by the computer. For DE2 a simple text representation is used to communicate the memory contents including instructions and data. This format is called SREC. Briefly in SREC data values are represented using the hexadecimal system using the ASCII encoding for each hex digit. Each line has the form ADDRESS DATA where ADDRESS is the starting address where the data values encoded in DATA should be stored (note this is a simplified explanation of the format  the actual format is a bit more complicated  you can look at the <span class=SpellE>srec</span> file that the assembler produces and then find a complete description on-line).</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal>The previous discussion is overly simplistic. In the specific case, converting an assembly program into its loadable form is done in steps. Here are they:</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;mso-list:l0 level1 lfo2; tab-stops:list .75in'><![if !supportLists]><span style='mso-fareast-font-family: "Times New Roman"'><span style='mso-list:Ignore'>1.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>Pass all assembly programs through the assembler. The assembler is called nios2-elf-as in our case. This produces an <b style='mso-bidi-font-weight:normal'>object </b>file (typically identified by the .o suffix). The object <span class=GramE>files contains</span> the code and data you wrote in the assembly program. </p> <p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;mso-list:l0 level1 lfo2; tab-stops:list .75in'><![if !supportLists]><span style='mso-fareast-font-family: "Times New Roman"'><span style='mso-list:Ignore'>2.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>Pass all object files to the <b style='mso-bidi-font-weight:normal'>linker. </b>The linker is called nios2-elf-ld in our case. The linker <i style='mso-bidi-font-style:normal'>links </i>together all object files into a single binary to be loaded onto the board. The format for this binary file is ELF in our case. ELF is a commonly used format for binary programs. </p> <p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;mso-list:l0 level1 lfo2; tab-stops:list .75in'><![if !supportLists]><span style='mso-fareast-font-family: "Times New Roman"'><span style='mso-list:Ignore'>3.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>Pass the ELF file through a tool to convert the contents into SREC format.</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal>We ll discuss these steps in more detail during the labs.</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal>Let s see how we could express our example program in NIOS II assembly:</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-tab-count:1'>      </span>.section .data<o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-tab-count:1'>      </span>.align 2<o:p></o:p></span></p> <p class=MsoNormal><span class=GramE><span lang=FR style='font-size:10.0pt; font-family:"Courier New";mso-ansi-language:FR'>va</span></span><span lang=FR style='font-size:10.0pt;font-family:"Courier New";mso-ansi-language:FR'>:<span style='mso-tab-count:1'>   </span>.long 0x0<o:p></o:p></span></p> <p class=MsoNormal><span class=SpellE><span class=GramE><span lang=FR style='font-size:10.0pt;font-family:"Courier New";mso-ansi-language:FR'>vb</span></span></span><span lang=FR style='font-size:10.0pt;font-family:"Courier New";mso-ansi-language: FR'>:<span style='mso-tab-count:1'>   </span>.long 0x11223344<o:p></o:p></span></p> <p class=MsoNormal><span class=SpellE><span class=GramE><span style='font-size: 10.0pt;font-family:"Courier New"'>vc</span></span></span><span style='font-size:10.0pt;font-family:"Courier New"'>:<span style='mso-tab-count: 1'>   </span>.long 0x55667788<o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p> <p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-tab-count:1'>      </span><span style='mso-spacerun:yes'> </span>.section .text<o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'>       </span>.global main<o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span class=GramE><span style='font-size:10.0pt; font-family:"Courier New"'>main</span></span><span style='font-size:10.0pt; font-family:"Courier New"'>:<o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-tab-count:1'>        </span><span class=SpellE><span class=GramE>movia</span></span> r11, <span class=SpellE>vb</span><o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-tab-count:1'>        </span><span class=SpellE><span class=GramE>ldwio</span></span> r9, 0(r11)<o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-tab-count:1'>        </span><span class=SpellE><span class=GramE>movia</span></span> r11, <span class=SpellE>vc</span><o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-tab-count:1'>        </span><span class=SpellE><span class=GramE>ldwio</span></span> r10, 0(r11)<o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-tab-count:1'>        </span><span class=GramE>add</span><span style='mso-spacerun:yes'>   </span>r8, r9, r10<o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'>        </span><span class=SpellE><span class=GramE>movia</span></span> r11, <span class=SpellE>vc</span><o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'>        </span><span class=SpellE><span class=GramE>stwio</span></span> r8, 0(r11)<o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'>The  .section .data is an assembler <b style='mso-bidi-font-weight:normal'>directive. </b>That is, it *does not* correspond to a NIOS II instruction or data. It just tells to the assembler that whatever follows will be used as data. This information is used by the linker to pack together all .data declared quantities into a continuous portion of memory. </p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><o:p>&nbsp;</o:p></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'>The  .align 2 directive instructs the assembler to start working at an address that is <span class=SpellE>divisble</span> by 2^2=4. This is necessary as we are going to crate word variables in memory. Words must be aligned. If we wanted half words we would have used  .align 1 . There is of course no need to align for bytes.</p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><o:p>&nbsp;</o:p></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'>The next line is:</p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span class=SpellE><span class=GramE><span style='font-size:10.0pt;font-family:"Courier New"'>va</span></span></span><span style='font-size:10.0pt;font-family:"Courier New"'>:<span style='mso-tab-count: 1'>     </span>.long 0x0<o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'>The  .long 0x0 instructs the assembler to allocate four bytes in memory and to initialize them to zero. When these four bytes are viewed as a word, its numeric value is zero. We used a hexadecimal representation for the number but we could have used decimal. The  <span class=SpellE><span class=GramE>va</span></span>: is a <b style='mso-bidi-font-weight: normal'>label. </b>The assembler is instructed to tread the identified  <span class=SpellE>va</span> as the number that corresponds to the memory location where the  .long 0x0 is placed. At this stage this address is unknown. However, at link time the linker will bind it to a specific memory location and thus will update all references accordingly. Unfortunately, with the current infrastructure it is not possible to easily force <span class=SpellE><span class=GramE>va</span></span> to be at a specific location in memory. We have to rely on the linker to allocate it. So, if eventually the linker allocated  <span class=SpellE>va</span><span class=GramE> <span style='mso-spacerun:yes'> </span>at</span> location 0x00100040, then all references to <span class=SpellE>va</span> will be replaced to references to this number. Any time you wrote <span class=SpellE><span class=GramE>va</span></span> it s as if you wrote 0x00100040.</p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><o:p>&nbsp;</o:p></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'>The next two lines instruct the assembler to allocate word for <span class=SpellE>vb</span> and <span class=SpellE><span class=GramE>vc</span></span> respectively.</p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><o:p>&nbsp;</o:p></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'>The  .section .text instructs the assembler that whatever comes next should be treated as instructions. The effect is that eventually the linker will pack together all  .text sections into a continuous portion of memory that precedes all  .data sections.</p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><o:p>&nbsp;</o:p></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'>The  .global main instructs the assembler to pass on the linker the identifier  main . The standard libraries linked with your program look for this symbol and treat it as the entry to your code. Your program should include a label  main: at some point. This is the next statement.</p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'> <span class=SpellE><span class=GramE>movia</span></span> r11, <span class=SpellE>vb</span> is the textual representation of the first instruction. This is actually a pseudo-instruction that is provided by the assembler for your convenience. It gets translated into two instructions:</p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-tab-count:1'>        </span><span class=SpellE><span class=GramE>movhi</span></span> <span style='mso-tab-count:1'>  </span>r11, upper 16 bits of <span class=SpellE>vb</span><o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-tab-count:1'>        </span><span class=SpellE><span class=GramE>addi</span></span><span style='mso-tab-count:1'>    </span>r11, r11, lower 16 bits of <span class=SpellE>vb</span><o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'>The rest of the program should be self-explanatory given the information we presented thus far.</p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><o:p>&nbsp;</o:p></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'>You can now compile your program. You have to call the assembler and then the linker. As part of the labs you should have received a preconfigured <span class=GramE>software</span> package that has all the necessary arguments.</p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'>Create a file called <span class=SpellE>bpc.s</span> write in it the assembly program and then do  make SRCS=<span class=SpellE>bpc.s</span> compile . This will produce amongst other files, a file called <span class=SpellE>prog.elf</span>. You can inspect its contents as follows:</p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span class=GramE>nios2-elf-objdump</span>  d <span class=SpellE>prog.elf</span>. This will produce a disassembly of the .text section:</p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span class=SpellE><span style='font-size:10.0pt; font-family:"Courier New"'>prog.elf</span></span><span style='font-size:10.0pt; font-family:"Courier New"'>:<span style='mso-spacerun:yes'>     </span>file format elf32-littlenios2<o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'>Disassembly of section .text:<o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'>01000000 &lt;main&gt;:<o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'> </span>1000000:<span style='mso-spacerun:yes'>       </span>02c04034<span style='mso-spacerun:yes'>        </span><span class=SpellE>movhi</span><span style='mso-spacerun:yes'>   </span>r11<span class=GramE>,256</span><o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'> </span>1000004:<span style='mso-spacerun:yes'>       </span>5ac01804<span style='mso-spacerun:yes'>        </span><span class=SpellE>addi</span><span style='mso-spacerun:yes'>    </span>r11<span class=GramE>,r11,96</span><o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'> </span>1000008:<span style='mso-spacerun:yes'>       </span>5a400037<span style='mso-spacerun:yes'>        </span><span class=SpellE>ldwio</span><span style='mso-spacerun:yes'>   </span>r9<span class=GramE>,0</span>(r11)<o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'> </span>100000c:<span style='mso-spacerun:yes'>      </span><span style='mso-spacerun:yes'> </span>02c04034<span style='mso-spacerun:yes'>        </span><span class=SpellE>movhi</span><span style='mso-spacerun:yes'>   </span>r11<span class=GramE>,256</span><o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'> </span>1000010:<span style='mso-spacerun:yes'>       </span>5ac01904<span style='mso-spacerun:yes'>        </span><span class=SpellE>addi</span><span style='mso-spacerun:yes'>    </span>r11<span class=GramE>,r11,100</span><o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'> </span>1000014:<span style='mso-spacerun:yes'>       </span>5a800037<span style='mso-spacerun:yes'>        </span><span class=SpellE>ldwio</span><span style='mso-spacerun:yes'>   </span>r10<span class=GramE>,0</span>(r11)<o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'> </span>1000018:<span style='mso-spacerun:yes'>       </span>4a91883a<span style='mso-spacerun:yes'>        </span>add<span style='mso-spacerun:yes'>     </span>r8<span class=GramE>,r9,r10</span><o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'> </span>100001c:<span style='mso-spacerun:yes'>       </span>02c04034<span style='mso-spacerun:yes'>        </span><span class=SpellE>movhi</span><span style='mso-spacerun:yes'>   </span>r11<span class=GramE>,256</span><o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'> </span>1000020:<span style='mso-spacerun:yes'>       </span>5ac01704<span style='mso-spacerun:yes'>        </span><span class=SpellE>addi</span><span style='mso-spacerun:yes'>    </span>r11<span class=GramE>,r11,92</span><o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'> </span>1000024:<span style='mso-spacerun:yes'>       </span>5a000035<span style='mso-spacerun:yes'>        </span><span class=SpellE>stwio</span><span style='mso-spacerun:yes'>   </span>r8<span class=GramE>,0</span>(r11)<o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'>The format of each line is:  address in memory ,  binary encoding of the instruction ,  textual representation of the instruction </p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'>You ll notice there are more instructions after that. That s the default init code for C programs. Please ignore for the time being.</p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><o:p>&nbsp;</o:p></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'>If you want to see where the variables <span class=SpellE><span class=GramE>va</span></span>, <span class=SpellE>vb</span>, and <span class=SpellE>vc</span> where defined you can use  nios2-elf-objdump  <span class=SpellE>syms</span> <span class=SpellE>prog.elf</span> . You ll get many symbols but if you look closely our variables should be there too:</p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'>01000060 l<span style='mso-spacerun:yes'>       </span>.<span class=GramE>data<span style='mso-spacerun:yes'>  </span>00000000</span> <span class=SpellE>vb</span><o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'>01000064 l<span style='mso-spacerun:yes'>       </span>.<span class=GramE>data<span style='mso-spacerun:yes'>  </span>00000000</span> <span class=SpellE>vc</span><o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'>0100005c l<span style='mso-spacerun:yes'>       </span>.<span class=GramE>data<span style='mso-spacerun:yes'>  </span>00000000</span> <span class=SpellE>va</span><o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'>These three lines give the address, the type (l = long = word), the section (.data) and the symbolic name used in the program. </p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><o:p>&nbsp;</o:p></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'>Now you should be able to figure out why the first two instructions are:</p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><o:p>&nbsp;</o:p></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'>1000000:<span style='mso-spacerun:yes'>       </span>02c04034<span style='mso-spacerun:yes'>        </span><span class=SpellE>movhi</span><span style='mso-spacerun:yes'>   </span>r11<span class=GramE>,256</span><o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'>1000004:<span style='mso-spacerun:yes'>       </span>5ac01804<span style='mso-spacerun:yes'>        </span><span class=SpellE>addi</span><span style='mso-spacerun:yes'>    </span>r11<span class=GramE>,r11,96</span><o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><o:p>&nbsp;</o:p></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'>Note that the numbers in the <span class=SpellE>instuctions</span> are in decimal and not <span class=SpellE>hexademical</span>. To add insult to injury, the first two numbers, that <span class=GramE>is</span> the address and the instruction encoding, are in hexadecimal with the 0x omitted. </p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'>The end result of these two instructions would be that r11 gets the value 0x0100064.<span style='mso-spacerun:yes'>  </span>These two instructions are the same as:</p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><o:p>&nbsp;</o:p></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'>1000000:<span style='mso-spacerun:yes'>       </span>02c04034<span style='mso-spacerun:yes'>        </span><span class=SpellE>movhi</span><span style='mso-spacerun:yes'>   </span>r11<span class=GramE>,0x0100</span><o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'>1000004:<span style='mso-spacerun:yes'>       </span>5ac01804<span style='mso-spacerun:yes'>        </span><span class=SpellE>addi</span><span style='mso-spacerun:yes'>    </span>r11<span class=GramE>,r11,0x64</span><o:p></o:p></span></p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal><b style='mso-bidi-font-weight:normal'>Other examples:<o:p></o:p></b></p> <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><o:p>&nbsp;</o:p></b></p> <p class=MsoNormal>The following code calculates a = 2 x b + c</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'>        </span>.section .text<o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'>        </span>.global main<o:p></o:p></span></p> <p class=MsoNormal><span class=GramE><span style='font-size:10.0pt;font-family: "Courier New"'>main</span></span><span style='font-size:10.0pt;font-family: "Courier New"'>:<o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'>        </span><span class=SpellE><span class=GramE>movia</span></span><span style='mso-spacerun:yes'>   </span>r11, <span class=SpellE>vb</span><o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'>        </span><span class=SpellE><span class=GramE>ldwio</span></span><span style='mso-spacerun:yes'>   </span>r9, 0(r11)<o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-tab-count:1'>      </span><span style='mso-spacerun:yes'>  </span><span class=SpellE><span class=GramE>movia</span></span><span style='mso-spacerun:yes'>   </span>r11, <span class=SpellE>rc</span><o:p></o:p></span></p> <p class=MsoNormal><span lang=FR style='font-size:10.0pt;font-family:"Courier New"; mso-ansi-language:FR'><span style='mso-spacerun:yes'>        </span><span class=SpellE><span class=GramE>ldwio</span></span><span style='mso-spacerun:yes'>   </span>r10, 0(r11)<o:p></o:p></span></p> <p class=MsoNormal><span lang=FR style='font-size:10.0pt;font-family:"Courier New"; mso-ansi-language:FR'><span style='mso-spacerun:yes'>        </span></span><span class=GramE><span style='font-size:10.0pt;font-family:"Courier New"'>add</span></span><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'>     </span>r8, r9, r10<o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-tab-count:1'>      </span><span style='mso-spacerun:yes'>  </span><span class=GramE>add</span><span style='mso-tab-count:1'> </span><span style='mso-spacerun:yes'>    </span>r8, r8, r9<o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-tab-count:1'>      </span><span style='mso-spacerun:yes'>  </span><span class=SpellE><span class=GramE>movia</span></span><span style='mso-spacerun:yes'>   </span>r11, <span class=SpellE>va</span><o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'>        </span></span><span class=SpellE><span class=GramE><span lang=FR style='font-size:10.0pt;font-family:"Courier New"; mso-ansi-language:FR'>stwio</span></span></span><span lang=FR style='font-size: 10.0pt;font-family:"Courier New";mso-ansi-language:FR'><span style='mso-spacerun:yes'>   </span>r8, 0(r11)<o:p></o:p></span></p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal>The same for this:</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'>        </span>.section .text<o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'>        </span>.global main<o:p></o:p></span></p> <p class=MsoNormal><span class=GramE><span style='font-size:10.0pt;font-family: "Courier New"'>main</span></span><span style='font-size:10.0pt;font-family: "Courier New"'>:<o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'>        </span><span class=SpellE><span class=GramE>movia</span></span><span style='mso-spacerun:yes'>   </span>r11, <span class=SpellE>vb</span><o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'>        </span></span><span class=SpellE><span class=GramE><span lang=FR style='font-size:10.0pt;font-family:"Courier New"; mso-ansi-language:FR'>ldwio</span></span></span><span lang=FR style='font-size: 10.0pt;font-family:"Courier New";mso-ansi-language:FR'><span style='mso-spacerun:yes'>   </span>r9, <span class=SpellE>vb</span><o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-tab-count:1'>      </span><span style='mso-spacerun:yes'>  </span><span class=GramE>add</span><span style='mso-tab-count:1'> </span><span style='mso-spacerun:yes'>    </span>r9, r9, r9<o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-tab-count:1'>      </span><span style='mso-spacerun:yes'>  </span><span class=SpellE><span class=GramE>movia</span></span><span style='mso-spacerun:yes'>   </span>r11, <span class=SpellE>vc</span><o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'>        </span><span class=SpellE><span class=GramE>ldwio</span></span><span style='mso-spacerun:yes'>   </span>r10, 0(r11)<o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'>        </span><span class=GramE>add</span><span style='mso-spacerun:yes'>     </span>r8, r9, r10<o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-tab-count:1'>      </span><span style='mso-spacerun:yes'>  </span><span class=SpellE><span class=GramE>movia</span></span><span style='mso-spacerun:yes'>   </span>r11, <span class=SpellE>va</span><o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'>     </span><span style='mso-spacerun:yes'>   </span></span><span class=SpellE><span class=GramE><span lang=FR style='font-size:10.0pt; font-family:"Courier New";mso-ansi-language:FR'>stwio</span></span></span><span lang=FR style='font-size:10.0pt;font-family:"Courier New";mso-ansi-language: FR'><span style='mso-spacerun:yes'>   </span>r8, 0(r11)<o:p></o:p></span></p> <p class=MsoNormal><span lang=FR style='mso-ansi-language:FR'><o:p>&nbsp;</o:p></span></p> <p class=MsoNormal>This calculates <span class=GramE>a<span style='mso-spacerun:yes'>  </span>=</span> 3 x b + 5 x c</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'>        </span>.section .text<o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'>        </span>.global main<o:p></o:p></span></p> <p class=MsoNormal><span class=GramE><span style='font-size:10.0pt;font-family: "Courier New"'>main</span></span><span style='font-size:10.0pt;font-family: "Courier New"'>:<o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'>        </span><span class=SpellE><span class=GramE>movia</span></span><span style='mso-spacerun:yes'>   </span>r11, <span class=SpellE>vb</span><o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'>        </span></span><span class=SpellE><span class=GramE><span lang=FR style='font-size:10.0pt;font-family:"Courier New"; mso-ansi-language:FR'>ldwio</span></span></span><span lang=FR style='font-size: 10.0pt;font-family:"Courier New";mso-ansi-language:FR'><span style='mso-spacerun:yes'>   </span>r9, 0(r11)<o:p></o:p></span></p> <p class=MsoNormal><span lang=FR style='font-size:10.0pt;font-family:"Courier New"; mso-ansi-language:FR'><span style='mso-tab-count:1'>      </span><span style='mso-spacerun:yes'>  </span><span class=SpellE><span class=GramE>add</span></span><span style='mso-tab-count:1'> </span><span style='mso-spacerun:yes'>    </span>r10, r9, r9<o:p></o:p></span></p> <p class=MsoNormal><span lang=FR style='font-size:10.0pt;font-family:"Courier New"; mso-ansi-language:FR'><span style='mso-tab-count:1'>      </span><span style='mso-spacerun:yes'>  </span><span class=SpellE><span class=GramE>add</span></span><span style='mso-tab-count:1'> </span><span style='mso-spacerun:yes'>    </span>r9, r10, r9<o:p></o:p></span></p> <p class=MsoNormal><span lang=FR style='font-size:10.0pt;font-family:"Courier New"; mso-ansi-language:FR'><span style='mso-tab-count:1'>      </span><span style='mso-spacerun:yes'>  </span><span class=SpellE><span class=GramE>movia</span></span><span style='mso-spacerun:yes'>   </span>r11, <span class=SpellE>vc</span><o:p></o:p></span></p> <p class=MsoNormal><span lang=FR style='font-size:10.0pt;font-family:"Courier New"; mso-ansi-language:FR'><span style='mso-spacerun:yes'>        </span><span class=SpellE><span class=GramE>ldwio</span></span><span style='mso-spacerun:yes'>   </span>r10, 0(r11)<o:p></o:p></span></p> <p class=MsoNormal><span lang=FR style='font-size:10.0pt;font-family:"Courier New"; mso-ansi-language:FR'><span style='mso-tab-count:1'>      </span><span style='mso-spacerun:yes'>  </span><span class=SpellE><span class=GramE>add</span></span><span style='mso-tab-count:1'> </span><span style='mso-spacerun:yes'>    </span>r8, r10, r10<o:p></o:p></span></p> <p class=MsoNormal><span lang=FR style='font-size:10.0pt;font-family:"Courier New"; mso-ansi-language:FR'><span style='mso-tab-count:1'>      </span><span style='mso-spacerun:yes'>  </span><span class=SpellE><span class=GramE>add</span></span><span style='mso-tab-count:1'> </span><span style='mso-spacerun:yes'>    </span>r8, r8, r8<o:p></o:p></span></p> <p class=MsoNormal><span lang=FR style='font-size:10.0pt;font-family:"Courier New"; mso-ansi-language:FR'><span style='mso-tab-count:1'>      </span></span><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'>  </span><span class=GramE>add</span><span style='mso-tab-count:1'> </span><span style='mso-spacerun:yes'>    </span>r8, r8, r10<o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'>        </span><span class=GramE>add</span><span style='mso-spacerun:yes'>     </span>r8, r9, r8<o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-tab-count:1'>      </span><span style='mso-spacerun:yes'>  </span><span class=SpellE><span class=GramE>movia</span></span><span style='mso-spacerun:yes'>   </span>r11, <span class=SpellE>vc</span><o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'>        </span></span><span class=SpellE><span class=GramE><span lang=FR style='font-size:10.0pt;font-family:"Courier New"; mso-ansi-language:FR'>stwio</span></span></span><span lang=FR style='font-size: 10.0pt;font-family:"Courier New";mso-ansi-language:FR'><span style='mso-spacerun:yes'>   </span>r8, 0(r11)<o:p></o:p></span></p> <p class=MsoNormal><span lang=FR style='mso-ansi-language:FR'><o:p>&nbsp;</o:p></span></p> <p class=MsoNormal><span class=SpellE><b style='mso-bidi-font-weight:normal'><span lang=FR style='mso-ansi-language:FR'>Other</span></b></span><b style='mso-bidi-font-weight:normal'><span lang=FR style='mso-ansi-language: FR'> <span class=SpellE>Datatypes</span><o:p></o:p></span></b></p> <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=FR style='mso-ansi-language:FR'><o:p>&nbsp;</o:p></span></b></p> <p class=MsoNormal>The examples we have seen so far use words, i.e., full 32-bit numbers. NIOS II provides byte and half-word loads and stores. The byte load and stores are:</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal style='text-indent:.5in'><span class=SpellE><span class=GramE><span style='font-size:10.0pt;font-family:"Courier New"'>ldbio</span></span></span><span style='font-size:10.0pt;font-family:"Courier New"'> <span class=SpellE>rX</span>,<span style='mso-spacerun:yes'>  </span>Imm16(<span class=SpellE>rY</span>)<o:p></o:p></span></p> <p class=MsoNormal style='text-indent:.5in'><span class=SpellE><span class=GramE><span style='font-size:10.0pt;font-family:"Courier New"'>ldbuio</span></span></span><span style='font-size:10.0pt;font-family:"Courier New"'> <span class=SpellE>rX</span>, Imm16(<span class=SpellE>rY</span>)<o:p></o:p></span></p> <p class=MsoNormal style='text-indent:.5in'><span class=SpellE><span class=GramE><span style='font-size:10.0pt;font-family:"Courier New"'>stbio</span></span></span><span style='font-size:10.0pt;font-family:"Courier New"'> <span class=SpellE>rX</span>, Imm16(<span class=SpellE>rY</span>)<o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p> <p class=MsoNormal>The  <span class=GramE>imm16(</span><span class=SpellE>rY</span>) part is identical to the <span class=SpellE>ldwio</span> we have seen up to this point. It calculates the address that is accessed as: value of register RY + sign-<span class=GramE>extended(</span>imm16).</p> <p class=MsoNormal> <span class=SpellE><span class=GramE>ldbio</span></span> loads a single byte from the memory address and sign-extends it to 32-bits into register <span class=SpellE>rX</span>. So if the value read from memory is 0x7F <span class=SpellE><span class=GramE>rX</span></span> will get the value 0x0000007F. If the value read is 0x81, <span class=SpellE><span class=GramE>rX</span></span> will get the value 0xFFFFFF81. This instruction treats the byte as a signed 8-bit integer in 2 s complement.</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal> <span class=SpellE><span class=GramE>ldbuio</span></span> treats the byte as an unsigned 8-bit integer and zero-extends it to 32-bits in <span class=SpellE>rX</span>. So if the values read are 0x7F or 0x81, <span class=SpellE><span class=GramE>rX</span></span> will be written with the values 0x0000007F and 0x00000081 respectively.</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal> <span class=SpellE><span class=GramE>stbio</span></span> takes the lower 8-bits of register <span class=SpellE>rX</span> and writes them to the memory byte referenced. There is no issue of sign- or zero-extension since we take an 8-bit quantity and write to another 8-bit quantity.</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal>The equivalent instructions for half-word are:</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal style='text-indent:.5in'><span class=SpellE><span class=GramE><span style='font-size:10.0pt;font-family:"Courier New"'>ldhio</span></span></span><span style='font-size:10.0pt;font-family:"Courier New"'> <span class=SpellE>rX</span>,<span style='mso-spacerun:yes'>  </span>Imm16(<span class=SpellE>rY</span>)<o:p></o:p></span></p> <p class=MsoNormal style='text-indent:.5in'><span class=SpellE><span class=GramE><span style='font-size:10.0pt;font-family:"Courier New"'>ldhuio</span></span></span><span style='font-size:10.0pt;font-family:"Courier New"'> <span class=SpellE>rX</span>, Imm16(<span class=SpellE>rY</span>)<o:p></o:p></span></p> <p class=MsoNormal style='text-indent:.5in'><span class=SpellE><span class=GramE><span style='font-size:10.0pt;font-family:"Courier New"'>sthio</span></span></span><span style='font-size:10.0pt;font-family:"Courier New"'> <span class=SpellE>rX</span>, Imm16(<span class=SpellE>rY</span>)<o:p></o:p></span></p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal>They read and write two bytes from memory. The two loads tread the word as either a signed 16-bit integer (<span class=SpellE>ldhio</span>) or as an unsigned 16-bit integer (<span class=SpellE>ldhuio</span>) and respectively sign- or zero-extend it to 32 bits.</p> <p class=MsoNormal> <span class=SpellE><span class=GramE>sthio</span></span> takes the lower two bytes of <span class=SpellE>rX</span> and writes them to memory.</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><b style='mso-bidi-font-weight:normal'>A Shorter Program<o:p></o:p></b></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><b style='mso-bidi-font-weight:normal'><o:p>&nbsp;</o:p></b></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'>We can use the immediate field of the load and store instructions to reduce the number of instructions needed to implement our programs.</p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'>Take for example <span class=GramE>the a</span> = b + c program. <span style='mso-spacerun:yes'> </span>Because we declare data as follows:</p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><o:p>&nbsp;</o:p></p> <p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-tab-count:1'>      </span>.section .data<o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-tab-count:1'>      </span>.align 2<o:p></o:p></span></p> <p class=MsoNormal><span class=GramE><span lang=FR style='font-size:10.0pt; font-family:"Courier New";mso-ansi-language:FR'>va</span></span><span lang=FR style='font-size:10.0pt;font-family:"Courier New";mso-ansi-language:FR'>:<span style='mso-tab-count:1'>   </span>.long 0x0<o:p></o:p></span></p> <p class=MsoNormal><span class=SpellE><span class=GramE><span lang=FR style='font-size:10.0pt;font-family:"Courier New";mso-ansi-language:FR'>vb</span></span></span><span lang=FR style='font-size:10.0pt;font-family:"Courier New";mso-ansi-language: FR'>:<span style='mso-tab-count:1'>   </span>.long 0x11223344<o:p></o:p></span></p> <p class=MsoNormal><span class=SpellE><span class=GramE><span style='font-size: 10.0pt;font-family:"Courier New"'>vc</span></span></span><span style='font-size:10.0pt;font-family:"Courier New"'>:<span style='mso-tab-count: 1'>   </span>.long 0x55667788<o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><o:p>&nbsp;</o:p></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'>We know that <span class=SpellE>vb</span> = <span class=SpellE><span class=GramE>va</span></span> + 2 and <span class=SpellE>vc</span> = <span class=SpellE>va</span> + 4. That is the address represented by <span class=SpellE>vb</span> is the address represented by <span class=SpellE><span class=GramE>va</span></span> plus two. </p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><o:p>&nbsp;</o:p></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'>So, now instead of using <span class=SpellE>movia</span> for every address we can instead use one to load <span class=SpellE><span class=GramE>va</span></span> and then use distances (or offsets) to access the other variables:</p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><o:p>&nbsp;</o:p></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='mso-tab-count:1'>                </span>.text</p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span class=GramE>main</span>:</p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='mso-tab-count:1'>                </span><span class=SpellE><span class=GramE>movia</span></span> <span style='mso-tab-count: 1'>     </span>r11, <span class=SpellE>va</span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='mso-tab-count:1'>                </span><span class=SpellE><span class=GramE>ldwio</span></span><span style='mso-spacerun:yes'>  </span><span style='mso-tab-count:1'>     </span>r8, 4(r11)<span style='mso-tab-count:1'> </span><span style='mso-tab-count:1'>                </span># access <span class=SpellE>vb</span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='mso-tab-count:1'>                </span><span class=SpellE><span class=GramE>ldwio</span></span><span style='mso-tab-count: 1'>       </span>r9, 8(r11)<span style='mso-tab-count:2'>                 </span># access <span class=SpellE>vc</span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='mso-tab-count:1'>                </span><span class=GramE>add</span><span style='mso-tab-count:1'>          </span>r8, r8, r9</p> <p class=MsoNormal style='text-indent:.5in;tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='mso-tab-count:1'>    </span><span class=SpellE><span class=GramE>stdwio</span></span> <span style='mso-tab-count: 1'>    </span>r8, 0(r11)<span style='mso-tab-count:2'>                 </span># write the result into <span class=SpellE>va</span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><b style='mso-bidi-font-weight:normal'><o:p>&nbsp;</o:p></b></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><b style='mso-bidi-font-weight:normal'>------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------<o:p></o:p></b></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><b style='mso-bidi-font-weight:normal'>Reducing the Instruction Count Further<o:p></o:p></b></p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal><u>We will cover this part of the lecture later in the course. Please ignore for the time being.<o:p></o:p></u></p> <p class=MsoNormal><u><o:p><span style='text-decoration:none'>&nbsp;</span></o:p></u></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'>In our program every load and store to a memory variable is translated into three instructions. <span class=GramE>Two for the <span class=SpellE>movia</span> and one for the actual load.</span> We can reduce the instructions as follows:</p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><o:p>&nbsp;</o:p></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'>        </span>.section .text<o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'>        </span>.global main<o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span class=GramE><span style='font-size:10.0pt; font-family:"Courier New"'>main</span></span><span style='font-size:10.0pt; font-family:"Courier New"'>:<o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'>        </span><span class=SpellE><span class=GramE>movhi</span></span><span style='mso-spacerun:yes'>   </span>r11, %<span class=SpellE>hiadj</span>(<span class=SpellE>vb</span>)<o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'>        </span><span class=SpellE><span class=GramE>ldwio</span></span><span style='mso-spacerun:yes'>   </span>r9, %lo(<span class=SpellE>vb</span>)(r11)<o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'>  </span><span style='mso-spacerun:yes'>      </span><span class=SpellE><span class=GramE>movhi</span></span><span style='mso-spacerun:yes'>   </span>r11, %<span class=SpellE>hiadj</span>(<span class=SpellE>vb</span>)<o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'>        </span><span class=SpellE><span class=GramE>ldwio</span></span><span style='mso-spacerun:yes'>   </span>r10, %lo(<span class=SpellE>vb</span>)(r11)<o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'>        </span><span class=GramE>add</span><span style='mso-spacerun:yes'>     </span>r8, r9, r10<o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'>        </span><span class=SpellE><span class=GramE>movhi</span></span><span style='mso-spacerun:yes'>   </span>r11, %<span class=SpellE>hiadj</span>(<span class=SpellE>va</span>)<o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'>        </span></span><span class=SpellE><span lang=FR style='font-size:10.0pt;font-family:"Courier New";mso-ansi-language: FR'>stwio</span></span><span lang=FR style='font-size:10.0pt;font-family:"Courier New"; mso-ansi-language:FR'><span style='mso-spacerun:yes'>   </span>r8, %<span class=SpellE><span class=GramE>lo</span></span><span class=GramE>(</span>va)(r11)<o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span lang=FR style='font-size:10.0pt;font-family: "Courier New";mso-ansi-language:FR'><o:p>&nbsp;</o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span lang=FR style='font-size:10.0pt;font-family: "Courier New";mso-ansi-language:FR'><span style='mso-spacerun:yes'>        </span>.section .data<o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span lang=FR style='font-size:10.0pt;font-family: "Courier New";mso-ansi-language:FR'><span style='mso-spacerun:yes'>        </span>.<span class=SpellE>align</span> 2<o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span class=GramE><span lang=FR style='font-size: 10.0pt;font-family:"Courier New";mso-ansi-language:FR'>va</span></span><span lang=FR style='font-size:10.0pt;font-family:"Courier New";mso-ansi-language: FR'>:<span style='mso-spacerun:yes'>     </span>.long 0x0<o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span class=SpellE><span class=GramE><span style='font-size:10.0pt;font-family:"Courier New"'>vb</span></span></span><span style='font-size:10.0pt;font-family:"Courier New"'>:<span style='mso-spacerun:yes'>     </span>.long 0x11223344<o:p></o:p></span></p> <p class=MsoNormal style='tab-stops:48.0pt 96.0pt 2.0in 192.0pt 240.0pt 4.0in 336.0pt 384.0pt 6.0in 480.0pt 528.0pt 8.0in 624.0pt 672.0pt 10.0in 768.0pt 816.0pt 12.0in 912.0pt 960.0pt; mso-layout-grid-align:none'><span class=SpellE><span class=GramE><span style='font-size:10.0pt;font-family:"Courier New"'>vc</span></span></span><span style='font-size:10.0pt;font-family:"Courier New"'>:<span style='mso-spacerun:yes'>     </span>.long 0x55667788<o:p></o:p></span></p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal>Here we use two assembly macros: %<span class=SpellE><span class=GramE>hiadj</span></span><span class=GramE>(</span>label) and %lo(label). These are macros for the assembler and they are evaluated by the assembler and converted into number. They are not evaluated at run time.</p> <p class=MsoNormal>Given a label or equivalently a 32-bit number the two macros can be used to calculate that immediate using a <span class=SpellE>movhi</span> and an addition. So,  <span class=SpellE>movhi</span> r11, %<span class=SpellE><span class=GramE>hiadj</span></span><span class=GramE>(</span><span class=SpellE>vb</span>) followed by <span class=SpellE>ldwio</span> r9, %lo(<span class=SpellE>vb</span>)(r11) effectively read from memory location vb. A  <span class=SpellE>movhi</span> r11, %<span class=SpellE><span class=GramE>hiadj</span></span><span class=GramE>(</span><span class=SpellE>vb</span>) followed by  <span class=SpellE>addi</span> r11, r11, %lo(<span class=SpellE>vb</span>) writes the 32-bit value <span class=SpellE>vb</span> into r11.</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal><b style='mso-bidi-font-weight:normal'>An Even Shorter Program<o:p></o:p></b></p> <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><o:p>&nbsp;</o:p></b></p> <p class=MsoNormal>Finally, here s how we <span class=GramE>can <span class=SpellE>can</span></span> use r11 as the base register for all loads, thus eliminating the two extra <span class=SpellE>movhi</span> instructions. In the following code we exploit that <span class=SpellE><span class=GramE>va</span></span>, <span class=SpellE>vb</span>, and <span class=SpellE>vc</span> are allocated consecutively in memory. Thus the distance in memory addresses of <span class=SpellE>vb</span> from <span class=SpellE><span class=GramE>va</span></span> is 4 and the distance of <span class=SpellE>vc</span> from <span class=SpellE>va</span> is 8:</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'>        </span>.section .text<o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'>        </span>.global main<o:p></o:p></span></p> <p class=MsoNormal><span class=GramE><span style='font-size:10.0pt;font-family: "Courier New"'>main</span></span><span style='font-size:10.0pt;font-family: "Courier New"'>:<o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'>        </span><span class=SpellE><span class=GramE>movhi</span></span><span style='mso-spacerun:yes'>   </span>r11, %<span class=SpellE>hiadj</span>(<span class=SpellE>vb</span>)<o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'>        </span><span class=SpellE><span class=GramE>ldwio</span></span><span style='mso-spacerun:yes'>   </span>r9, %lo(<span class=SpellE>va</span>)+4(r11)<o:p></o:p></span></p> <p class=MsoNormal><span lang=FR style='font-size:10.0pt;font-family:"Courier New"; mso-ansi-language:FR'><span style='mso-spacerun:yes'>        </span><span class=SpellE>ldwio</span><span style='mso-spacerun:yes'>   </span>r10, %<span class=SpellE><span class=GramE>lo</span></span><span class=GramE>(</span>va)+8(r11)<o:p></o:p></span></p> <p class=MsoNormal><span lang=FR style='font-size:10.0pt;font-family:"Courier New"; mso-ansi-language:FR'><span style='mso-spacerun:yes'>        </span></span><span class=GramE><span style='font-size:10.0pt;font-family:"Courier New"'>add</span></span><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'>     </span>r8, r9, r10<o:p></o:p></span></p> <p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><span style='mso-spacerun:yes'>        </span></span><span class=SpellE><span lang=FR style='font-size:10.0pt;font-family:"Courier New";mso-ansi-language: FR'>stwio</span></span><span lang=FR style='font-size:10.0pt;font-family:"Courier New"; mso-ansi-language:FR'><span style='mso-spacerun:yes'>   </span>r8, %<span class=SpellE><span class=GramE>lo</span></span><span class=GramE>(</span>va)+0(r11)<o:p></o:p></span></p> <p class=MsoNormal><span lang=FR style='font-size:10.0pt;font-family:"Courier New"; mso-ansi-language:FR'><o:p>&nbsp;</o:p></span></p> <p class=MsoNormal><span lang=FR style='font-size:10.0pt;font-family:"Courier New"; mso-ansi-language:FR'><span style='mso-spacerun:yes'>        </span>.section .data<o:p></o:p></span></p> <p class=MsoNormal><span lang=FR style='font-size:10.0pt;font-family:"Courier New"; mso-ansi-language:FR'><span style='mso-spacerun:yes'>        </span>.<span class=SpellE>align</span> 2<o:p></o:p></span></p> <p class=MsoNormal><span class=GramE><span lang=FR style='font-size:10.0pt; font-family:"Courier New";mso-ansi-language:FR'>va</span></span><span lang=FR style='font-size:10.0pt;font-family:"Courier New";mso-ansi-language:FR'>:<span style='mso-spacerun:yes'>     </span>.long 0x0<o:p></o:p></span></p> <p class=MsoNormal><span class=SpellE><span class=GramE><span style='font-size: 10.0pt;font-family:"Courier New"'>vb</span></span></span><span style='font-size:10.0pt;font-family:"Courier New"'>:<span style='mso-spacerun:yes'>     </span>.long 0x11223344<o:p></o:p></span></p> <p class=MsoNormal><span class=SpellE><span class=GramE><span style='font-size: 10.0pt;font-family:"Courier New"'>vc</span></span></span><span style='font-size:10.0pt;font-family:"Courier New"'>:<span style='mso-spacerun:yes'>     </span>.long 0x55667788<o:p></o:p></span></p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> </div> </body> </html>