《汇编语言》王爽——实验7
<p><img src="https://img2018.cnblogs.com/blog/1832901/201911/1832901-20191101210014404-243181592.png"><img src="https://img2018.cnblogs.com/blog/1832901/201911/1832901-20191101210051819-1823465759.png"><img src="https://img2018.cnblogs.com/blog/1832901/201911/1832901-20191101211231638-887873980.png"></p><p><img src="https://img2018.cnblogs.com/blog/1832901/201911/1832901-20191101212844015-1500313282.png"></p>
<p> </p>
<div class="cnblogs_code">
<pre><span style="font-size: 18pt"><span style="color: rgba(0, 128, 128, 1)"> 1</span> assume <span style="color: rgba(0, 128, 128, 1)">cs:</span>code, <span style="color: rgba(0, 128, 128, 1)">ds:</span>data, <span style="color: rgba(0, 128, 128, 1)">es:</span>table, <span style="color: rgba(0, 128, 128, 1)">ss:</span><span style="color: rgba(0, 0, 0, 1)">stacks
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span>
<span style="color: rgba(0, 128, 128, 1)"> 3</span> <span style="color: rgba(0, 0, 0, 1)">data segment
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 128, 0, 1)">;</span><span style="color: rgba(0, 128, 0, 1)">年份</span>
<span style="color: rgba(0, 128, 128, 1)"> 5</span> db <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">1975</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">1976</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">1977</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">1978</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">1979</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">1980</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">1981</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">1982</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">1983</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(0, 128, 128, 1)"> 6</span> db <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">1984</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">1985</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">1986</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">1987</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">1988</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">1989</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">1990</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">1991</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">1992</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(0, 128, 128, 1)"> 7</span> db <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">1993</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">1994</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">1995</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 128, 0, 1)">;</span><span style="color: rgba(0, 128, 0, 1)">收入</span>
<span style="color: rgba(0, 128, 128, 1)"> 9</span> dd <span style="color: rgba(128, 0, 128, 1)">16</span>, <span style="color: rgba(128, 0, 128, 1)">22</span>, <span style="color: rgba(128, 0, 128, 1)">382</span>, <span style="color: rgba(128, 0, 128, 1)">1356</span>, <span style="color: rgba(128, 0, 128, 1)">2390</span>, <span style="color: rgba(128, 0, 128, 1)">8000</span>, <span style="color: rgba(128, 0, 128, 1)">16000</span>, <span style="color: rgba(128, 0, 128, 1)">24486</span>, <span style="color: rgba(128, 0, 128, 1)">50065</span>, <span style="color: rgba(128, 0, 128, 1)">97479</span>, <span style="color: rgba(128, 0, 128, 1)">140417</span>, <span style="color: rgba(128, 0, 128, 1)">197514</span>
<span style="color: rgba(0, 128, 128, 1)">10</span> dd <span style="color: rgba(128, 0, 128, 1)">345980</span>, <span style="color: rgba(128, 0, 128, 1)">590827</span>, <span style="color: rgba(128, 0, 128, 1)">803530</span>, <span style="color: rgba(128, 0, 128, 1)">1183000</span>, <span style="color: rgba(128, 0, 128, 1)">1843000</span>, <span style="color: rgba(128, 0, 128, 1)">2759000</span>, <span style="color: rgba(128, 0, 128, 1)">3753000</span>, <span style="color: rgba(128, 0, 128, 1)">4649000</span>, <span style="color: rgba(128, 0, 128, 1)">5937000</span>
<span style="color: rgba(0, 128, 128, 1)">11</span> <span style="color: rgba(0, 128, 0, 1)">;</span><span style="color: rgba(0, 128, 0, 1)">员工</span>
<span style="color: rgba(0, 128, 128, 1)">12</span> dw <span style="color: rgba(128, 0, 128, 1)">3</span>, <span style="color: rgba(128, 0, 128, 1)">7</span>, <span style="color: rgba(128, 0, 128, 1)">9</span>, <span style="color: rgba(128, 0, 128, 1)">13</span>, <span style="color: rgba(128, 0, 128, 1)">28</span>, <span style="color: rgba(128, 0, 128, 1)">38</span>, <span style="color: rgba(128, 0, 128, 1)">130</span>, <span style="color: rgba(128, 0, 128, 1)">220</span>, <span style="color: rgba(128, 0, 128, 1)">476</span>, <span style="color: rgba(128, 0, 128, 1)">778</span>, <span style="color: rgba(128, 0, 128, 1)">1001</span>, <span style="color: rgba(128, 0, 128, 1)">1442</span>, <span style="color: rgba(128, 0, 128, 1)">2258</span>, <span style="color: rgba(128, 0, 128, 1)">2793</span>, <span style="color: rgba(128, 0, 128, 1)">4037</span>, <span style="color: rgba(128, 0, 128, 1)">5635</span>, <span style="color: rgba(128, 0, 128, 1)">8226</span>
<span style="color: rgba(0, 128, 128, 1)">13</span> dw <span style="color: rgba(128, 0, 128, 1)">11542</span>, <span style="color: rgba(128, 0, 128, 1)">14430</span>, <span style="color: rgba(128, 0, 128, 1)">15257</span>, <span style="color: rgba(128, 0, 128, 1)">17800</span>
<span style="color: rgba(0, 128, 128, 1)">14</span> <span style="color: rgba(0, 0, 0, 1)">data ends
</span><span style="color: rgba(0, 128, 128, 1)">15</span>
<span style="color: rgba(0, 128, 128, 1)">16</span> <span style="color: rgba(0, 0, 0, 1)">table segment
</span><span style="color: rgba(0, 128, 128, 1)">17</span> db <span style="color: rgba(128, 0, 128, 1)">21</span> dup (<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">year sumn ne ?? </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">18</span> <span style="color: rgba(0, 0, 0, 1)">table ends
</span><span style="color: rgba(0, 128, 128, 1)">19</span>
<span style="color: rgba(0, 128, 128, 1)">20</span> <span style="color: rgba(0, 0, 0, 1)">stacks segment
</span><span style="color: rgba(0, 128, 128, 1)">21</span> dw <span style="color: rgba(128, 0, 128, 1)">0</span>, <span style="color: rgba(128, 0, 128, 1)">0</span>, <span style="color: rgba(128, 0, 128, 1)">0</span>, <span style="color: rgba(128, 0, 128, 1)">0</span>
<span style="color: rgba(0, 128, 128, 1)">22</span> <span style="color: rgba(0, 0, 0, 1)">stacks ends
</span><span style="color: rgba(0, 128, 128, 1)">23</span>
<span style="color: rgba(0, 128, 128, 1)">24</span> <span style="color: rgba(0, 0, 0, 1)">code segment
</span><span style="color: rgba(0, 128, 128, 1)">25</span> <span style="color: rgba(0, 128, 128, 1)">start:</span>
<span style="color: rgba(0, 128, 128, 1)">26</span> <span style="color: rgba(0, 0, 255, 1)">mov</span><span style="color: rgba(0, 0, 0, 1)"> ax, data
</span><span style="color: rgba(0, 128, 128, 1)">27</span> <span style="color: rgba(0, 0, 255, 1)">mov</span> ds, ax <span style="color: rgba(0, 128, 0, 1)">;</span><span style="color: rgba(0, 128, 0, 1)">设置DS的段地址</span>
<span style="color: rgba(0, 128, 128, 1)">28</span> <span style="color: rgba(0, 0, 255, 1)">mov</span><span style="color: rgba(0, 0, 0, 1)"> ax, table
</span><span style="color: rgba(0, 128, 128, 1)">29</span> <span style="color: rgba(0, 0, 255, 1)">mov</span> es, ax <span style="color: rgba(0, 128, 0, 1)">;</span><span style="color: rgba(0, 128, 0, 1)">设置ES的段地址指向table</span>
<span style="color: rgba(0, 128, 128, 1)">30</span> <span style="color: rgba(0, 0, 255, 1)">mov</span><span style="color: rgba(0, 0, 0, 1)"> ax, stacks
</span><span style="color: rgba(0, 128, 128, 1)">31</span> <span style="color: rgba(0, 0, 255, 1)">mov</span> ss, ax <span style="color: rgba(0, 128, 0, 1)">;</span><span style="color: rgba(0, 128, 0, 1)">设置SS的段地址</span>
<span style="color: rgba(0, 128, 128, 1)">32</span> <span style="color: rgba(0, 0, 255, 1)">mov</span> sp, <span style="color: rgba(128, 0, 128, 1)">8</span> <span style="color: rgba(0, 128, 0, 1)">;</span><span style="color: rgba(0, 128, 0, 1)">设置SP的栈顶指针</span>
<span style="color: rgba(0, 128, 128, 1)">33</span> <span style="color: rgba(0, 0, 255, 1)">mov</span> si, <span style="color: rgba(128, 0, 128, 1)">0</span>
<span style="color: rgba(0, 128, 128, 1)">34</span> <span style="color: rgba(0, 0, 255, 1)">mov</span> di, <span style="color: rgba(128, 0, 128, 1)">0</span>
<span style="color: rgba(0, 128, 128, 1)">35</span> <span style="color: rgba(0, 0, 255, 1)">mov</span> cx, <span style="color: rgba(128, 0, 128, 1)">21</span> <span style="color: rgba(0, 128, 0, 1)">;</span><span style="color: rgba(0, 128, 0, 1)">设置最外层的循环次数为21次</span>
<span style="color: rgba(0, 128, 128, 1)">36</span> <span style="color: rgba(0, 128, 128, 1)">s:</span>
<span style="color: rgba(0, 128, 128, 1)">37</span> <span style="color: rgba(0, 0, 255, 1)">push</span> cx <span style="color: rgba(0, 128, 0, 1)">;</span><span style="color: rgba(0, 128, 0, 1)">利用栈来保护最外层的循环</span>
<span style="color: rgba(0, 128, 128, 1)">38</span> <span style="color: rgba(0, 0, 255, 1)">mov</span> cx, <span style="color: rgba(128, 0, 128, 1)">2</span> <span style="color: rgba(0, 128, 0, 1)">;</span><span style="color: rgba(0, 128, 0, 1)">设置年份和收入的循环次数为2次,因为数据结构逻辑上一样,所以可以在一次循环中同时处理</span>
<span style="color: rgba(0, 128, 128, 1)">39</span> <span style="color: rgba(0, 0, 255, 1)">mov</span> bx, <span style="color: rgba(128, 0, 128, 1)">0</span>
<span style="color: rgba(0, 128, 128, 1)">40</span> <span style="color: rgba(0, 128, 128, 1)">s1:</span>
<span style="color: rgba(0, 128, 128, 1)">41</span> <span style="color: rgba(0, 0, 255, 1)">mov</span> ax, <span style="color: rgba(0, 128, 128, 1)">ds:</span>[<span style="color: rgba(128, 0, 128, 1)">0</span>+si+bx] <span style="color: rgba(0, 128, 0, 1)">;</span><span style="color: rgba(0, 128, 0, 1)">0看作是数据段中年份的起始地址</span>
<span style="color: rgba(0, 128, 128, 1)">42</span> <span style="color: rgba(0, 0, 255, 1)">mov</span> <span style="color: rgba(0, 128, 128, 1)">es:</span>[<span style="color: rgba(128, 0, 128, 1)">0</span>+di+bx], ax <span style="color: rgba(0, 128, 0, 1)">;</span><span style="color: rgba(0, 128, 0, 1)">0看作是table段中年份的起始地址</span>
<span style="color: rgba(0, 128, 128, 1)">43</span> <span style="color: rgba(0, 0, 255, 1)">mov</span> ax, <span style="color: rgba(0, 128, 128, 1)">ds:</span>[<span style="color: rgba(128, 0, 128, 1)">84</span>+si+bx] <span style="color: rgba(0, 128, 0, 1)">;</span><span style="color: rgba(0, 128, 0, 1)">84看作是数据段中收入的起始地址</span>
<span style="color: rgba(0, 128, 128, 1)">44</span> <span style="color: rgba(0, 0, 255, 1)">mov</span> <span style="color: rgba(0, 128, 128, 1)">es:</span>[<span style="color: rgba(128, 0, 128, 1)">5</span>+di+bx], ax <span style="color: rgba(0, 128, 0, 1)">;</span><span style="color: rgba(0, 128, 0, 1)">5看作是table段中收入的起始地址</span>
<span style="color: rgba(0, 128, 128, 1)">45</span> <span style="color: rgba(0, 0, 255, 1)">add</span> bx, <span style="color: rgba(128, 0, 128, 1)">2</span>
<span style="color: rgba(0, 128, 128, 1)">46</span> <span style="color: rgba(0, 0, 0, 1)"> loop s1
</span><span style="color: rgba(0, 128, 128, 1)">47</span> <span style="color: rgba(0, 0, 255, 1)">add</span> si, bx <span style="color: rgba(0, 128, 0, 1)">;</span><span style="color: rgba(0, 128, 0, 1)">让si来记录走过的字节数,保证在修改table段中的下一行时数据是正确的</span>
<span style="color: rgba(0, 128, 128, 1)">48</span> <span style="color: rgba(0, 0, 255, 1)">push</span> si <span style="color: rgba(0, 128, 0, 1)">;</span><span style="color: rgba(0, 128, 0, 1)">想让si同时也处理员工的数据 </span>
<span style="color: rgba(0, 128, 128, 1)">49</span>
<span style="color: rgba(0, 128, 128, 1)">50</span> <span style="color: rgba(0, 0, 255, 1)">mov</span> ax, si <span style="color: rgba(0, 128, 0, 1)">;</span><span style="color: rgba(0, 128, 0, 1)">处理员工的数据</span>
<span style="color: rgba(0, 128, 128, 1)">51</span> <span style="color: rgba(0, 0, 255, 1)">mov</span> dl, <span style="color: rgba(128, 0, 128, 1)">2</span>
<span style="color: rgba(0, 128, 128, 1)">52</span> <span style="color: rgba(0, 0, 255, 1)">div</span> dl <span style="color: rgba(0, 128, 0, 1)">;</span><span style="color: rgba(0, 128, 0, 1)">因为年份和收入处理时字节长度相同,而员工是它们的一半,所以让si/2后再减2</span>
<span style="color: rgba(0, 128, 128, 1)">53</span> <span style="color: rgba(0, 0, 255, 1)">mov</span><span style="color: rgba(0, 0, 0, 1)"> si, ax
</span><span style="color: rgba(0, 128, 128, 1)">54</span> <span style="color: rgba(0, 0, 255, 1)">sub</span> si, <span style="color: rgba(128, 0, 128, 1)">2</span> <span style="color: rgba(0, 128, 0, 1)">;</span><span style="color: rgba(0, 128, 0, 1)">减2就可以对应到数据段员工的数据</span>
<span style="color: rgba(0, 128, 128, 1)">55</span> <span style="color: rgba(0, 0, 255, 1)">mov</span> ax, <span style="color: rgba(0, 128, 128, 1)">ds:</span>[<span style="color: rgba(128, 0, 128, 1)">168</span>+si] <span style="color: rgba(0, 128, 0, 1)">;</span><span style="color: rgba(0, 128, 0, 1)">168看作是数据段中员工的起始地址</span>
<span style="color: rgba(0, 128, 128, 1)">56</span> <span style="color: rgba(0, 0, 255, 1)">mov</span> <span style="color: rgba(0, 128, 128, 1)">es:</span>[<span style="color: rgba(128, 0, 128, 1)">10</span>+di], ax <span style="color: rgba(0, 128, 0, 1)">;</span><span style="color: rgba(0, 128, 0, 1)">10看作是table段中员工的起始地址</span>
<span style="color: rgba(0, 128, 128, 1)">57</span> <span style="color: rgba(0, 0, 255, 1)">pop</span> si <span style="color: rgba(0, 128, 0, 1)">;</span><span style="color: rgba(0, 128, 0, 1)">把si真正的值还原回去,保证下次年份和收入能正常处理</span>
<span style="color: rgba(0, 128, 128, 1)">58</span>
<span style="color: rgba(0, 128, 128, 1)">59</span> <span style="color: rgba(0, 128, 0, 1)">;</span><span style="color: rgba(0, 128, 0, 1)">处理人均收入的数据</span>
<span style="color: rgba(0, 128, 128, 1)">60</span> <span style="color: rgba(0, 0, 255, 1)">mov</span> dx, <span style="color: rgba(0, 128, 128, 1)">es:</span>[<span style="color: rgba(128, 0, 128, 1)">7</span>+di]<span style="color: rgba(0, 128, 0, 1)">;</span><span style="color: rgba(0, 128, 0, 1)">被除数的高位</span>
<span style="color: rgba(0, 128, 128, 1)">61</span> <span style="color: rgba(0, 0, 255, 1)">mov</span> ax, <span style="color: rgba(0, 128, 128, 1)">es:</span>[<span style="color: rgba(128, 0, 128, 1)">5</span>+di] <span style="color: rgba(0, 128, 0, 1)">;</span><span style="color: rgba(0, 128, 0, 1)">被除数的低位</span>
<span style="color: rgba(0, 128, 128, 1)">62</span> <span style="color: rgba(0, 0, 255, 1)">div</span> word ptr <span style="color: rgba(0, 128, 128, 1)">es:</span>[<span style="color: rgba(128, 0, 128, 1)">10</span>+di] <span style="color: rgba(0, 128, 0, 1)">;</span><span style="color: rgba(0, 128, 0, 1)">平均收入</span>
<span style="color: rgba(0, 128, 128, 1)">63</span> <span style="color: rgba(0, 0, 255, 1)">mov</span> <span style="color: rgba(0, 128, 128, 1)">es:</span>[<span style="color: rgba(128, 0, 128, 1)">13</span><span style="color: rgba(0, 0, 0, 1)">+di], ax
</span><span style="color: rgba(0, 128, 128, 1)">64</span>
<span style="color: rgba(0, 128, 128, 1)">65</span> <span style="color: rgba(0, 0, 255, 1)">add</span> di, <span style="color: rgba(128, 0, 128, 1)">16</span>
<span style="color: rgba(0, 128, 128, 1)">66</span> <span style="color: rgba(0, 0, 255, 1)">pop</span><span style="color: rgba(0, 0, 0, 1)"> cx
</span><span style="color: rgba(0, 128, 128, 1)">67</span> <span style="color: rgba(0, 0, 0, 1)"> loop s
</span><span style="color: rgba(0, 128, 128, 1)">68</span>
<span style="color: rgba(0, 128, 128, 1)">69</span> <span style="color: rgba(0, 0, 255, 1)">mov</span><span style="color: rgba(0, 0, 0, 1)"> ax, 4C00H
</span><span style="color: rgba(0, 128, 128, 1)">70</span> <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> 21H
</span><span style="color: rgba(0, 128, 128, 1)">71</span> <span style="color: rgba(0, 0, 0, 1)">code ends
</span><span style="color: rgba(0, 128, 128, 1)">72</span>
<span style="color: rgba(0, 128, 128, 1)">73</span> end start</span></pre>
</div>
<p style="text-align: center"><span style="font-family: "comic sans ms", sans-serif; font-size: 16px">本人最近刚开始学汇编语言,以上代码是按照我自己的理解写的,可能不够优化,若有疑问请评论指正,谢谢!</span></p><br><br>
来源:https://www.cnblogs.com/yxddj/p/11779882.html
頁:
[1]