ÿþ<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="lec7%20-%20loops%20and%20arrays_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>154</o:Revision> <o:TotalTime>346</o:TotalTime> <o:Created>2005-01-01T01:34:00Z</o:Created> <o:LastSaved>2008-01-07T15:37:00Z</o:LastSaved> <o:Pages>1</o:Pages> <o:Words>717</o:Words> <o:Characters>4090</o:Characters> <o:Company>Organization</o:Company> <o:Lines>34</o:Lines> <o:Paragraphs>9</o:Paragraphs> <o:CharactersWithSpaces>4798</o:CharactersWithSpaces> <o:Version>11.9999</o:Version> </o:DocumentProperties> </xml><![endif]--><!--[if gte mso 9]><xml> <w:WordDocument> <w:Zoom>BestFit</w:Zoom> <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:Wingdings; panose-1:5 0 0 0 0 0 0 0 0 0; mso-font-charset:2; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @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;} --> </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="12290"/> </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>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'>For Loops and Arrays<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>In this section we will be implementing in assembly the following C pseudo-code:</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal><span class=GramE><span style='font-family:"Courier New"'>short</span></span><span style='font-family:"Courier New"'> <span class=SpellE>arr</span>[5] = { 1, 2, 3, 4, 5 };<span style='mso-tab-count:1'> </span>// an array of word values (16 bit)<o:p></o:p></span></p> <p class=MsoNormal><span class=GramE><span style='font-family:"Courier New"'>short</span></span><span style='font-family:"Courier New"'> n = 5;<span style='mso-tab-count:3'>            </span>// the number of elements in the array<o:p></o:p></span></p> <p class=MsoNormal><span class=GramE><span style='font-family:"Courier New"'>short</span></span><span style='font-family:"Courier New"'> sum = 0;<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p> <p class=MsoNormal><span class=GramE><span style='font-family:"Courier New"'>for</span></span><span style='font-family:"Courier New"'> (<span class=SpellE>i</span> = 0; <span class=SpellE>i</span><span style='mso-spacerun:yes'>  </span>&lt; n; <span class=SpellE>i</span>++)<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Courier New"'><span style='mso-spacerun:yes'>   </span><span class=GramE>sum</span> = sum + <span class=SpellE>arr</span>[<span class=SpellE>i</span>];<o:p></o:p></span></p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal>How <span class=GramE>are arrays</span> are implemented at the machine level? They are typically implemented by allocating each element one after the other in memory. So, in our example, if <span class=SpellE><span class=GramE>arr</span></span><span class=GramE>[</span>0] is at memory location 0x1000 then <span class=SpellE>arr</span>[1] will be at 0x1002, <span class=SpellE>arr</span>[2] at 0x1004 and in general <span class=SpellE>arr</span>[<span class=SpellE>i</span>] will be at 0x1000 + <span class=SpellE>i</span> x 2. Generally, if we have a <span class=SpellE>unidimensional</span> array A of elements TYPE, then element a[<span class=SpellE>i</span>] is at address &amp;<span class=GramE>A[</span>0] + <span class=SpellE>sizeof</span>(TYPE) x <span class=SpellE>i</span>.</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal>Note that the C expression &amp;<span class=GramE>A[</span>0] is equivalent to the address of the first array element. Instead of &amp;A[0], in C we can typically write A (note: in C if you write &amp;A[0] + <span class=SpellE>i</span>, it will be automatically converted into &amp;A[0] + I x <span class=SpellE>sizeof</span>(a[0]));</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal>Let us first declare our variables:</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal><span style='font-family:"Courier New"'><span style='mso-tab-count:1'>     </span>.data<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Courier New"'><span style='mso-tab-count:1'>     </span>.align 1<o:p></o:p></span></p> <p class=MsoNormal><span class=SpellE><span class=GramE><span style='font-family: "Courier New"'>arr</span></span></span><span style='font-family:"Courier New"'>:<span style='mso-tab-count:1'> </span>.<span class=SpellE>hword</span><span style='mso-tab-count:1'>    </span>1, 2, 3, 4, 5 <o:p></o:p></span></p> <p class=MsoNormal><span class=GramE><span style='font-family:"Courier New"'>n</span></span><span style='font-family:"Courier New"'><span style='mso-tab-count:1'>    </span>.<span class=SpellE>hword</span><span style='mso-tab-count:1'>    </span>5<o:p></o:p></span></p> <p class=MsoNormal><span class=GramE><span style='font-family:"Courier New"'>sum</span></span><span style='font-family:"Courier New"'><span style='mso-tab-count:1'>  </span>.<span class=SpellE>hword</span><span style='mso-tab-count:1'>    </span>0<o:p></o:p></span></p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal>Focusing now on the code we should review what is the execution semantics of the C for statement. In general, a C statement comprises four parts:</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal><span class=GramE><span style='font-family:"Courier New"'>for</span></span><span style='font-family:"Courier New"'> (INIT; COND; POST)<o:p></o:p></span></p> <p class=MsoNormal style='text-indent:6.0pt'><span style='font-family:"Courier New"'>BODY<o:p></o:p></span></p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal><span class=GramE>and</span> execution is done as follows:</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal style='margin-left:.5in;text-indent:.5in'><span style='font-family:"Courier New"'>INIT<o:p></o:p></span></p> <p class=MsoNormal><span class=GramE><span style='font-family:"Courier New"'>loop</span></span><span style='font-family:"Courier New"'><o:p></o:p></span></p> <p class=MsoNormal style='margin-left:.5in;text-indent:.5in'><span class=GramE><span style='font-family:"Courier New"'>if</span></span><span style='font-family: "Courier New"'> (NOT COND) exit the loop<o:p></o:p></span></p> <p class=MsoNormal style='text-indent:6.0pt'><span style='font-family:"Courier New"'><span style='mso-spacerun:yes'> </span><span style='mso-tab-count:2'>        </span>BODY<o:p></o:p></span></p> <p class=MsoNormal style='text-indent:6.0pt'><span style='font-family:"Courier New"'><span style='mso-tab-count:2'>         </span>POST<o:p></o:p></span></p> <p class=MsoNormal style='text-indent:6.0pt'><span style='font-family:"Courier New"'><span style='mso-tab-count:2'>         </span><span class=GramE>go</span> back to  loop <o:p></o:p></span></p> <p class=MsoNormal style='text-indent:6.0pt'><o:p>&nbsp;</o:p></p> <p class=MsoNormal><span class=GramE>where</span> loop is label. </p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal>In words: The INIT part is always executed once at the beginning. We then test the condition (COND). If the condition is not TRUE then this is the end of it we skip <span class=GramE>the for</span>. Otherwise, if the condition is TRUE, we then execute the BODY portion, followed by the POST portion. We then return back to testing the condition and repeat the aforementioned steps until the condition stops being TRUE.</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal>In our loop we have:</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal style='text-indent:.5in'>INIT <span style='font-family:Wingdings; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"; mso-char-type:symbol;mso-symbol-font-family:Wingdings'><span style='mso-char-type: symbol;mso-symbol-font-family:Wingdings'>à</span></span> <span class=SpellE>i</span> = 0</p> <p class=MsoNormal style='text-indent:.5in'>COND <span style='font-family:Wingdings; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"; mso-char-type:symbol;mso-symbol-font-family:Wingdings'><span style='mso-char-type: symbol;mso-symbol-font-family:Wingdings'>à</span></span> <span class=SpellE>i</span> &lt; n</p> <p class=MsoNormal style='text-indent:.5in'>BODY <span style='font-family:Wingdings; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"; mso-char-type:symbol;mso-symbol-font-family:Wingdings'><span style='mso-char-type: symbol;mso-symbol-font-family:Wingdings'>à</span></span> sum = sum + <span class=SpellE>arr</span>[<span class=SpellE>i</span>]</p> <p class=MsoNormal style='text-indent:.5in'>POST <span style='font-family:Wingdings; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"; mso-char-type:symbol;mso-symbol-font-family:Wingdings'><span style='mso-char-type: symbol;mso-symbol-font-family:Wingdings'>à</span></span> <span class=SpellE>i</span> = <span class=SpellE>i</span> + 1</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal>Let s write each of them in turn.</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal>For starters let us use a register for holding variable <span class=SpellE>i</span>. Let s use r8 for this.</p> <p class=MsoNormal>Then INIT becomes:</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal><span class=GramE><span style='font-family:"Courier New"'>add</span></span><span style='font-family:"Courier New"'> r8, r0, r0</span><span style='mso-spacerun:yes'>  </span><span style='font-family:Wingdings; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"; mso-char-type:symbol;mso-symbol-font-family:Wingdings'><span style='mso-char-type: symbol;mso-symbol-font-family:Wingdings'>à</span></span> D0 = 0</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal>Our condition requires comparing the current value of <span class=SpellE>i</span> and n. <span class=GramE>Assuming</span> that n does not change in value while our loop executes (and it shouldn t) then we have the code:</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal><span class=SpellE><span class=GramE><span style='font-family: "Courier New"'>movhi</span></span></span><span style='font-family:"Courier New"'> r9, %<span class=SpellE>hiadj</span>(n)<o:p></o:p></span></p> <p class=MsoNormal><span class=SpellE><span class=GramE><span style='font-family: "Courier New"'>ldhio</span></span></span><span style='font-family:"Courier New"'> r9, %lo(n)(r9)</span> <span style='font-family:Wingdings;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman";mso-char-type:symbol; mso-symbol-font-family:Wingdings'><span style='mso-char-type:symbol;mso-symbol-font-family: Wingdings'>à</span></span> keep <span class=SpellE>n s</span> value in r9</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal><span class=GramE>so</span> now we can test for the reverse condition and jump out of the loop as needed.</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal><span class=SpellE><span class=GramE><span style='font-family: "Courier New"'>bge</span></span></span><span style='font-family:"Courier New"'> r8, r9, <span class=SpellE>endloop</span><o:p></o:p></span></p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal>Finally, the POST section becomes:</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal><span class=SpellE><span class=GramE><span style='font-family: "Courier New"'>addi</span></span></span><span style='font-family:"Courier New"'> r8, r8, 1 </span><span style='font-family:Wingdings;mso-ascii-font-family:"Courier New"; mso-hansi-font-family:"Courier New";mso-bidi-font-family:"Courier New"; mso-char-type:symbol;mso-symbol-font-family:Wingdings'><span style='mso-char-type: symbol;mso-symbol-font-family:Wingdings'>à</span></span><span style='font-family: "Courier New"'> r8 = r8 + 1<o:p></o:p></span></p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal>The almost complete code is then as follows:</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal><span style='font-family:"Courier New"'><span style='mso-tab-count:1'>     </span>.text<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Courier New"'><span style='mso-tab-count:1'>     </span><o:p></o:p></span></p> <p class=MsoNormal><span class=SpellE><span class=GramE><span style='font-family: "Courier New"'>forloop</span></span></span><span style='font-family:"Courier New"'>:<span style='mso-tab-count:1'>  </span><o:p></o:p></span></p> <p class=MsoNormal style='margin-left:.5in;text-indent:.5in'><span class=GramE><span style='font-family:"Courier New"'>add</span></span><span style='font-family: "Courier New"'> r8, r0, r0</span> </p> <p class=MsoNormal style='margin-left:.5in;text-indent:.5in'><span class=SpellE><span class=GramE><span style='font-family:"Courier New"'>movia</span></span></span><span style='font-family:"Courier New"'> r9, n<o:p></o:p></span></p> <p class=MsoNormal style='margin-left:.5in;text-indent:.5in'><span class=SpellE><span class=GramE><span style='font-family:"Courier New"'>ldhio</span></span></span><span style='font-family:"Courier New"'> r9, 0(r9)</span></p> <p class=MsoNormal><span style='font-family:"Courier New"'><span style='mso-tab-count:1'>     </span><o:p></o:p></span></p> <p class=MsoNormal><span class=GramE><span style='font-family:"Courier New"'>loop</span></span><span style='font-family:"Courier New"'>:<span style='mso-tab-count:1'>     </span><span class=SpellE>bge</span><span style='mso-tab-count:1'>  </span>r8, r9, <span class=SpellE>endloop</span> <o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p> <p class=MsoNormal><span style='font-family:"Courier New"'><span style='mso-tab-count:2'>          </span>BODY GOES HERE<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p> <p class=MsoNormal><span style='font-family:"Courier New"'><span style='mso-tab-count:2'>          </span><span class=SpellE><span class=GramE>addi</span></span><span style='mso-tab-count:1'> </span>r8, r8, 1<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Courier New"'><span style='mso-tab-count:2'>          </span><span class=SpellE><span class=GramE>br</span></span><span style='mso-tab-count:1'>   </span>loop<o:p></o:p></span></p> <p class=MsoNormal><span class=SpellE><span class=GramE><span style='font-family: "Courier New"'>endloop</span></span></span><span style='font-family:"Courier New"'>:<o:p></o:p></span></p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal>Let s use register r10 to keep the running sum and at the end we will write this value into the sum variable in memory. So, we should initialize r10 to 0 in the beginning and at the end of the loop write its value into the sum variable.</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal>Now we can focus on implementing the BODY part. </p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal>We can rewrite sum=sum + a[<span class=SpellE>i</span>] as:</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal><span style='mso-tab-count:1'>            </span><span class=SpellE><span class=GramE>tmp</span></span> = <span class=SpellE>arr</span>[<span class=SpellE>i</span>];</p> <p class=MsoNormal><span style='mso-tab-count:1'>            </span><span class=GramE>sum</span> = sum + <span class=SpellE>tmp</span>;</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal>Assuming that <span class=SpellE>tmp</span> will be held into a register now we have to devise a way of reading <span class=SpellE>arr</span>[<span class=SpellE>i</span>] into that register.</p> <p class=MsoNormal>To implement the statement <span class=SpellE>tmp</span><span class=GramE>=<span style='mso-spacerun:yes'>  </span><span class=SpellE>arr</span></span>[<span class=SpellE>i</span>] we need to be able to access all array elements one after the other. </p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal>To access <span class=SpellE>arr</span>[<span class=SpellE>i</span>] we need to access the word at memory location  <span class=SpellE>arr</span> + <span class=SpellE><span class=GramE>i</span></span><span class=GramE><span style='mso-spacerun:yes'>  </span>x</span> 2 . The code for that is:</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-family:"Courier New"'>movia</span></span></span><span style='font-family:"Courier New"'> r11, <span class=SpellE>arr</span><span style='mso-tab-count:2'>     </span></span><span style='font-family:Wingdings; mso-ascii-font-family:"Courier New";mso-hansi-font-family:"Courier New"; mso-bidi-font-family:"Courier New";mso-char-type:symbol;mso-symbol-font-family: Wingdings'><span style='mso-char-type:symbol;mso-symbol-font-family:Wingdings'>à</span></span><span style='font-family:"Courier New"'> <span style='mso-tab-count:1'>  </span></span>r11 = &amp;<span class=SpellE>arr</span>[0]</p> <p class=MsoNormal style='text-indent:.5in'><span class=GramE><span style='font-family:"Courier New"'>add</span></span><span style='font-family: "Courier New"'><span style='mso-tab-count:1'>  </span> r11, r11, r8<span style='mso-tab-count:1'> </span></span><span style='font-family:Wingdings; mso-ascii-font-family:"Courier New";mso-hansi-font-family:"Courier New"; mso-bidi-font-family:"Courier New";mso-char-type:symbol;mso-symbol-font-family: Wingdings'><span style='mso-char-type:symbol;mso-symbol-font-family:Wingdings'>à</span></span><span style='font-family:"Courier New"'><span style='mso-spacerun:yes'>   </span>r11 = &amp;<span class=SpellE>arr</span>[0] + <span class=SpellE>i</span><o:p></o:p></span></p> <p class=MsoNormal style='text-indent:.5in'><span class=GramE><span style='font-family:"Courier New"'>add</span></span><span style='font-family: "Courier New"'><span style='mso-tab-count:1'>  </span> r11, r11, r8 </span><span style='font-family:Wingdings;mso-ascii-font-family:"Courier New";mso-hansi-font-family: "Courier New";mso-bidi-font-family:"Courier New";mso-char-type:symbol; mso-symbol-font-family:Wingdings'><span style='mso-char-type:symbol;mso-symbol-font-family: Wingdings'>à</span></span><span style='font-family:"Courier New"'><span style='mso-tab-count:1'>    </span>r11 = &amp;<span class=SpellE>arr</span>[0] + <span class=SpellE>i</span> + <span class=SpellE>i</span> = &amp;<span class=SpellE>arr</span>[0] + 2 x <span class=SpellE>i</span><o:p></o:p></span></p> <p class=MsoNormal style='text-indent:.5in'><span class=SpellE><span class=GramE><span style='font-family:"Courier New"'>ldhio</span></span></span><span style='font-family:"Courier New"'> r12, 0(r11)<span style='mso-tab-count:1'>  </span></span><span style='font-family:Wingdings;mso-ascii-font-family:"Courier New";mso-hansi-font-family: "Courier New";mso-bidi-font-family:"Courier New";mso-char-type:symbol; mso-symbol-font-family:Wingdings'><span style='mso-char-type:symbol;mso-symbol-font-family: Wingdings'>à</span></span><span style='font-family:"Courier New"'><span style='mso-tab-count:1'>   </span>r12 = <span class=SpellE>arr</span>[<span class=SpellE>i</span>]<o:p></o:p></span></p> <p class=MsoNormal style='text-indent:.5in'><span class=GramE><span style='font-family:"Courier New"'>add</span></span><span style='font-family: "Courier New"'><span style='mso-spacerun:yes'>   </span>r10, r10, r12 </span><span style='font-family:Wingdings;mso-ascii-font-family:"Courier New";mso-hansi-font-family: "Courier New";mso-bidi-font-family:"Courier New";mso-char-type:symbol; mso-symbol-font-family:Wingdings'><span style='mso-char-type:symbol;mso-symbol-font-family: Wingdings'>à</span></span><span style='font-family:"Courier New"'><span style='mso-spacerun:yes'>   </span>r10 = r10 + <span class=SpellE>arr</span>[<span class=SpellE>i</span>]<o:p></o:p></span></p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal>The complete code for <span class=GramE>the for</span> loop is as follows:</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal><span style='font-family:"Courier New"'><span style='mso-tab-count:1'>     </span>.text<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Courier New"'><span style='mso-tab-count:1'>     </span><o:p></o:p></span></p> <p class=MsoNormal><span class=SpellE><span class=GramE><span style='font-family: "Courier New"'>forloop</span></span></span><span style='font-family:"Courier New"'>:<span style='mso-tab-count:1'>  </span><o:p></o:p></span></p> <p class=MsoNormal style='margin-left:.5in;text-indent:.5in'><span class=GramE><span style='font-family:"Courier New"'>add</span></span><span style='font-family: "Courier New"'> r8, r0, r0</span> </p> <p class=MsoNormal style='margin-left:.5in;text-indent:.5in'><span class=SpellE><span class=GramE><span style='font-family:"Courier New"'>movia</span></span></span><span style='font-family:"Courier New"'> r9, n<o:p></o:p></span></p> <p class=MsoNormal style='margin-left:.5in;text-indent:.5in'><span class=SpellE><span class=GramE><span style='font-family:"Courier New"'>ldhio</span></span></span><span style='font-family:"Courier New"'> r9, 0(r9)</span></p> <p class=MsoNormal><span style='font-family:"Courier New"'><span style='mso-tab-count:1'>     </span><o:p></o:p></span></p> <p class=MsoNormal><span class=GramE><span style='font-family:"Courier New"'>loop</span></span><span style='font-family:"Courier New"'>:<span style='mso-tab-count:1'>     </span><span class=SpellE>bge</span><span style='mso-tab-count:1'>  </span>r8, r9, <span class=SpellE>endloop</span> <o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p> <p class=MsoNormal style='margin-left:.5in;text-indent:.5in'><span class=SpellE><span class=GramE><span style='font-family:"Courier New"'>movia</span></span></span><span style='font-family:"Courier New"'> r11, <span class=SpellE>arr</span><span style='mso-tab-count:1'> </span></span></p> <p class=MsoNormal style='margin-left:.5in;text-indent:.5in'><span class=GramE><span style='font-family:"Courier New"'>add</span></span><span style='font-family: "Courier New"'><span style='mso-tab-count:1'>  </span> r11, r11, r8<o:p></o:p></span></p> <p class=MsoNormal style='margin-left:.5in;text-indent:.5in'><span class=GramE><span style='font-family:"Courier New"'>add</span></span><span style='font-family: "Courier New"'><span style='mso-tab-count:1'>  </span> r11, r11, r8<o:p></o:p></span></p> <p class=MsoNormal style='margin-left:.5in;text-indent:.5in'><span class=SpellE><span class=GramE><span style='font-family:"Courier New"'>ldhio</span></span></span><span style='font-family:"Courier New"'> r12, 0(r11)<o:p></o:p></span></p> <p class=MsoNormal style='margin-left:.5in;text-indent:.5in'><span class=GramE><span style='font-family:"Courier New"'>add</span></span><span style='font-family: "Courier New"'><span style='mso-spacerun:yes'>   </span>r10, r10, r12<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p> <p class=MsoNormal><span style='font-family:"Courier New"'><span style='mso-tab-count:2'>          </span><span class=SpellE><span class=GramE>addi</span></span><span style='mso-tab-count:1'> </span>r8, r8, 1<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Courier New"'><span style='mso-tab-count:2'>          </span><span class=SpellE><span class=GramE>br</span></span><span style='mso-tab-count:1'>   </span>loop<o:p></o:p></span></p> <p class=MsoNormal><span class=SpellE><span class=GramE><span style='font-family: "Courier New"'>endloop</span></span></span><span style='font-family:"Courier New"'>:<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Courier New"'><span style='mso-tab-count:2'>          </span><span class=SpellE><span class=GramE>movia</span></span> r11, sum<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Courier New"'><span style='mso-tab-count:2'>          </span><span class=SpellE><span class=GramE>sthio</span></span> r12, 0(r11)<span style='mso-tab-count:1'>  </span>; write the sum into memory<o:p></o:p></span></p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal><b style='mso-bidi-font-weight:normal'>While Loops<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>A while loop takes the following general form:</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal><span style='mso-tab-count:1'>            </span><span class=GramE>while</span> (COND)</p> <p class=MsoNormal><span style='mso-tab-count:1'>            </span>{</p> <p class=MsoNormal><span style='mso-tab-count:2'>                        </span>BODY</p> <p class=MsoNormal><span style='mso-tab-count:1'>            </span>}</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal>First we test the CONDITION. If it is TRUE we execute the BODY. This process is repeated until the CONDITION evaluates to FALSE. This is equivalent to for without the INIT and POST sections. </p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal><b style='mso-bidi-font-weight:normal'>Do-While Loops<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>Do-while loops take the following form:</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal><span style='font-family:"Courier New"'><span style='mso-tab-count:1'>     </span><span class=GramE>do</span><o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Courier New"'><span style='mso-tab-count:1'>     </span>{<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Courier New"'><span style='mso-tab-count:2'>          </span>BODY<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Courier New"'><span style='mso-tab-count:1'>     </span>} while (COND);<o:p></o:p></span></p> <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span style='font-family:"Courier New"'><o:p>&nbsp;</o:p></span></b></p> <p class=MsoNormal>We first execute the BODY and then test the CONDITION. This process is repeated as long as the CONDITION evaluates to TRUE.</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal>Here s an example:</p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal><span style='font-family:"Courier New"'><span style='mso-tab-count:1'>     </span><span class=SpellE>i</span> = 0;<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Courier New"'><span style='mso-tab-count:1'>     </span><span class=GramE>do</span><o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Courier New"'><span style='mso-tab-count:1'>     </span>{<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Courier New"'><span style='mso-tab-count:2'>          </span><span class=GramE>sum</span> = sum + <span class=SpellE>arr</span>[<span class=SpellE>i</span>];<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Courier New"'><span style='mso-tab-count:1'>     </span><span style='mso-tab-count:1'>     </span><span class=SpellE><span class=GramE>i</span></span>++;<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Courier New"'><span style='mso-tab-count:1'>     </span>} while (<span class=SpellE>i</span> &lt; n);<o:p></o:p></span></p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> <p class=MsoNormal>This code assumes that n is at least 1.</p> <p class=MsoNormal>Here s the assembly implementation:</p> <p class=MsoNormal><span style='font-family:"Courier New"'><span style='mso-tab-count:1'>     </span>.text<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Courier New"'><span style='mso-tab-count:1'>     </span><o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Courier New"'><span style='mso-tab-count:1'>     </span><o:p></o:p></span></p> <p class=MsoNormal style='margin-left:.5in;text-indent:.5in'><span class=GramE><span style='font-family:"Courier New"'>add</span></span><span style='font-family: "Courier New"'> r8, r0, r0</span> </p> <p class=MsoNormal style='margin-left:.5in;text-indent:.5in'><span class=SpellE><span class=GramE><span style='font-family:"Courier New"'>movia</span></span></span><span style='font-family:"Courier New"'> r9, n<o:p></o:p></span></p> <p class=MsoNormal style='margin-left:.5in;text-indent:.5in'><span class=SpellE><span class=GramE><span style='font-family:"Courier New"'>ldhio</span></span></span><span style='font-family:"Courier New"'> r9, 0(r9)</span></p> <p class=MsoNormal><span style='font-family:"Courier New"'><span style='mso-tab-count:1'>     </span><o:p></o:p></span></p> <p class=MsoNormal><span class=SpellE><span class=GramE><span style='font-family: "Courier New"'>doloop</span></span></span><span style='font-family:"Courier New"'>:<span style='mso-tab-count:1'>   </span><o:p></o:p></span></p> <p class=MsoNormal style='margin-left:.5in;text-indent:.5in'><span class=SpellE><span class=GramE><span style='font-family:"Courier New"'>movia</span></span></span><span style='font-family:"Courier New"'> r11, <span class=SpellE>arr</span><span style='mso-tab-count:1'> </span></span></p> <p class=MsoNormal style='margin-left:.5in;text-indent:.5in'><span class=GramE><span style='font-family:"Courier New"'>add</span></span><span style='font-family: "Courier New"'><span style='mso-tab-count:1'>  </span> r11, r11, r8<o:p></o:p></span></p> <p class=MsoNormal style='margin-left:.5in;text-indent:.5in'><span class=GramE><span style='font-family:"Courier New"'>add</span></span><span style='font-family: "Courier New"'><span style='mso-tab-count:1'>  </span> r11, r11, r8<o:p></o:p></span></p> <p class=MsoNormal style='margin-left:.5in;text-indent:.5in'><span class=SpellE><span class=GramE><span style='font-family:"Courier New"'>ldhio</span></span></span><span style='font-family:"Courier New"'> r12, 0(r11)<o:p></o:p></span></p> <p class=MsoNormal style='margin-left:.5in;text-indent:.5in'><span class=GramE><span style='font-family:"Courier New"'>add</span></span><span style='font-family: "Courier New"'><span style='mso-spacerun:yes'>   </span>r10, r10, r12<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p> <p class=MsoNormal><span style='font-family:"Courier New"'><span style='mso-tab-count:2'>          </span><span class=SpellE><span class=GramE>addi</span></span><span style='mso-tab-count:1'> </span>r8, r8, 1<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Courier New"'><span style='mso-tab-count:2'>          </span><span class=SpellE><span class=GramE>blt</span></span><span style='mso-tab-count:1'>  </span>r8, r9, <span class=SpellE>doloop</span> <o:p></o:p></span></p> <p class=MsoNormal><span class=SpellE><span class=GramE><span style='font-family: "Courier New"'>endloop</span></span></span><span style='font-family:"Courier New"'>:<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Courier New"'><span style='mso-tab-count:2'>          </span><span class=SpellE><span class=GramE>movia</span></span> r11, sum<o:p></o:p></span></p> <p class=MsoNormal><span style='font-family:"Courier New"'><span style='mso-tab-count:2'>          </span><span class=SpellE><span class=GramE>sthio</span></span> r12, 0(r11)<span style='mso-tab-count:1'>  </span>; write the sum into memory<o:p></o:p></span></p> <p class=MsoNormal><o:p>&nbsp;</o:p></p> </div> </body> </html>