真理之光必将照亮东方大地 發表於 2019-5-4 16:34:00

x86汇编语言实践(4)

<div class="WordSection1">
<h1 align="left">0 写在前面</h1>
<p>  为了更深入的了解程序的实现原理,近期我学习了<span style="color: rgba(255, 153, 0, 1)">IBM-PC</span>相关原理,并手工编写了一些<span style="color: rgba(255, 153, 0, 1)">x86汇编</span>程序。</p>
<p>  在2017年的计算机组成原理中,曾对<span style="color: rgba(0, 0, 255, 1)">MIPS体系结构及其汇编语言</span>有过一定的了解,考虑到x86体系结构在目前的广泛应用,我通过两个月左右的时间对x86的相关内容进行了学习。</p>
<p>  在<span style="color: rgba(255, 0, 0, 1)">《x86汇编语言实践》系列</span>中(包括本篇、x86汇编语言实践(1)、x86汇编语言实践(2)、x86汇编语言实践(3)以及x86汇编语言复习笔记),我通过几个具体案例对x86汇编语言进行实践操作,并记录了自己再编写汇编代码中遇到的困难和心得体会,与各位学习x86汇编的朋友共同分享。</p>
<p>  我将我编写的一些汇编代码放到了github上,感兴趣的朋友可以点击屏幕左上角的小猫咪进入我的github,或请点击这里下载源代码。</p>
<h1>1 程序设计复习1</h1>
</div>
<h2 align="left">1-1 练习要点</h2>
<ul>
<li>
<p>字符串中查找指定字符</p>
</li>
<li>
<p>字符串中删除指定字符(使用<span style="color: rgba(255, 0, 0, 1)">快慢指针</span>)</p>
</li>
<li>
<p>子程序调用的堆栈参数传递</p>
</li>
</ul>
<h2 align="left">1-2 实现思路</h2>
<ul>
<li>
<p>在数据段存储好待查找的CHAR,和目标字符串STR1,并将二者初始化</p>
</li>
<li>
<p>主程序中首先将CHAR和STR1压栈</p>
</li>
<li>
<p>调用FIND_CH子程序查找是否有CHAR</p>
</li>
<li>
<p>若找到CHAR则调用DELX删除STR1中的X</p>
</li>
<li>
<p>为了在STR1的原内存空间上操作字符串的修改动作,采用快慢指针的方式进行删除。</p>
</li>
</ul>
<h2>1-3 重点难点</h2>
<ul>
<li>
<p>参数传递:使用堆栈进行参数传递,需要将参数压栈,注意子程序返回时,必须增加一个常数偏移量RET X。这里的X为压入参数所占的字节数,通常为2的倍数,以<span style="color: rgba(255, 0, 0, 1)">保证堆栈平衡</span></p>
</li>
<li>
<p>子程序保存现场:在子程序中,往往要用到很多寄存器,但我们希望在子程序返回时,调用子程序位置处周围的变量仍能恢复,这就需要在调用的子程序中保存现场,即子程序中所用到或修改的所有寄存器,都必须压栈处理</p>
</li>
<li>
<p>子程序中的堆栈寻址:<span style="color: rgba(0, 0, 255, 1)">使用BP寄存器寻址</span>,这是为了不修改SP指针,避免弄乱堆栈栈顶指针SP</p>
</li>
<li>
<p><span style="color: rgba(255, 102, 0, 1)">快慢指针</span>:与高级语言程序设计中的思路类似,首先将快慢指针指向STR1的头部,之后循环STR1的长度LEN次,若快指针SI指向的位置的字符不为CHAR,则将SI复制到慢指针DI,否则只将SI++。这里用到的技巧是<span style="color: rgba(128, 0, 128, 1)">可以使用LODSB和STOSB自动实现快指针SI与慢指针DI的自增操作</span>。</p>
</li>
</ul>
<h2>1-4 代码实现</h2>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> <span style="color: rgba(0, 0, 0, 1)">STACK   SEGMENT    PARA    STACK
</span><span style="color: rgba(0, 128, 128, 1)">2</span> <span style="color: rgba(0, 0, 0, 1)">      DW      100H DUP(?)
</span><span style="color: rgba(0, 128, 128, 1)">3</span> <span style="color: rgba(0, 0, 0, 1)">STACK    ENDS
</span><span style="color: rgba(0, 128, 128, 1)">4</span>
<span style="color: rgba(0, 128, 128, 1)">5</span> <span style="color: rgba(0, 0, 0, 1)">DATA    SEGMENT    PARA
</span><span style="color: rgba(0, 128, 128, 1)">6</span>   LEN      EQU <span style="color: rgba(128, 0, 128, 1)">12</span>
<span style="color: rgba(0, 128, 128, 1)">7</span>   CHAR   DB   <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">X</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(0, 128, 128, 1)">8</span>   STR1   DB   <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">CHENQIXIAN</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 128, 1)">13</span>,<span style="color: rgba(128, 0, 128, 1)">10</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)">'</span>
<span style="color: rgba(0, 128, 128, 1)">9</span>   MSG1   DB   <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">X IN CHENQIXIAN</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 128, 1)">13</span>,<span style="color: rgba(128, 0, 128, 1)">10</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)">'</span>
<span style="color: rgba(0, 128, 128, 1)"> 10</span>   MSG2    DB   <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">NOT FOUND X IN CHENQIXIAN</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 128, 1)">13</span>,<span style="color: rgba(128, 0, 128, 1)">10</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)">'</span>
<span style="color: rgba(0, 128, 128, 1)"> 11</span> <span style="color: rgba(0, 0, 0, 1)">    STR2    DB    LEN DUP(?)
</span><span style="color: rgba(0, 128, 128, 1)"> 12</span> <span style="color: rgba(0, 0, 0, 1)">DATA   ENDS
</span><span style="color: rgba(0, 128, 128, 1)"> 13</span>
<span style="color: rgba(0, 128, 128, 1)"> 14</span> <span style="color: rgba(0, 0, 0, 1)">CODE   SEGMENT PARA
</span><span style="color: rgba(0, 128, 128, 1)"> 15</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)">SS:</span><span style="color: rgba(0, 0, 0, 1)">STACK
</span><span style="color: rgba(0, 128, 128, 1)"> 16</span> <span style="color: rgba(0, 0, 0, 1)">OUTPUT    MACRO MSG
</span><span style="color: rgba(0, 128, 128, 1)"> 17</span>         <span style="color: rgba(0, 0, 255, 1)">PUSH</span><span style="color: rgba(0, 0, 0, 1)">   AX
</span><span style="color: rgba(0, 128, 128, 1)"> 18</span>         <span style="color: rgba(0, 0, 255, 1)">PUSH</span><span style="color: rgba(0, 0, 0, 1)">   DX
</span><span style="color: rgba(0, 128, 128, 1)"> 19</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span><span style="color: rgba(0, 0, 0, 1)">   DX,OFFSET MSG
</span><span style="color: rgba(0, 128, 128, 1)"> 20</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span>   AH,<span style="color: rgba(128, 0, 128, 1)">9</span>
<span style="color: rgba(0, 128, 128, 1)"> 21</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)"> 22</span>         <span style="color: rgba(0, 0, 255, 1)">POP</span><span style="color: rgba(0, 0, 0, 1)">      DX
</span><span style="color: rgba(0, 128, 128, 1)"> 23</span>         <span style="color: rgba(0, 0, 255, 1)">POP</span><span style="color: rgba(0, 0, 0, 1)">   AX
</span><span style="color: rgba(0, 128, 128, 1)"> 24</span> <span style="color: rgba(0, 0, 0, 1)">      ENDM
</span><span style="color: rgba(0, 128, 128, 1)"> 25</span>
<span style="color: rgba(0, 128, 128, 1)"> 26</span> <span style="color: rgba(0, 0, 0, 1)">DELX   PROC
</span><span style="color: rgba(0, 128, 128, 1)"> 27</span>   <span style="color: rgba(0, 128, 128, 1)">DELETEX:</span>
<span style="color: rgba(0, 128, 128, 1)"> 28</span>         <span style="color: rgba(0, 0, 255, 1)">PUSH</span><span style="color: rgba(0, 0, 0, 1)">   BP
</span><span style="color: rgba(0, 128, 128, 1)"> 29</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span><span style="color: rgba(0, 0, 0, 1)">   BP,SP
</span><span style="color: rgba(0, 128, 128, 1)"> 30</span>         <span style="color: rgba(0, 0, 255, 1)">PUSH</span><span style="color: rgba(0, 0, 0, 1)">   SI
</span><span style="color: rgba(0, 128, 128, 1)"> 31</span>         <span style="color: rgba(0, 0, 255, 1)">PUSH</span><span style="color: rgba(0, 0, 0, 1)">   DI
</span><span style="color: rgba(0, 128, 128, 1)"> 32</span>         <span style="color: rgba(0, 0, 255, 1)">PUSH</span><span style="color: rgba(0, 0, 0, 1)">   CX
</span><span style="color: rgba(0, 128, 128, 1)"> 33</span>         <span style="color: rgba(0, 0, 255, 1)">PUSH</span><span style="color: rgba(0, 0, 0, 1)">   AX
</span><span style="color: rgba(0, 128, 128, 1)"> 34</span>
<span style="color: rgba(0, 128, 128, 1)"> 35</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span>   SI,
</span><span style="color: rgba(0, 128, 128, 1)"> 36</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span>   DI,
</span><span style="color: rgba(0, 128, 128, 1)"> 37</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span><span style="color: rgba(0, 0, 0, 1)">   CX,LEN
</span><span style="color: rgba(0, 128, 128, 1)"> 38</span>
<span style="color: rgba(0, 128, 128, 1)"> 39</span>   <span style="color: rgba(0, 128, 128, 1)">DELX_LP:</span>
<span style="color: rgba(0, 128, 128, 1)"> 40</span>         <span style="color: rgba(0, 0, 255, 1)">LODSB</span>
<span style="color: rgba(0, 128, 128, 1)"> 41</span>         <span style="color: rgba(0, 0, 255, 1)">CMP</span>   AL,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">X</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(0, 128, 128, 1)"> 42</span>         <span style="color: rgba(0, 0, 255, 1)">JE</span><span style="color: rgba(0, 0, 0, 1)">         DELX_CONTINUE
</span><span style="color: rgba(0, 128, 128, 1)"> 43</span>         <span style="color: rgba(0, 0, 255, 1)">STOSB</span>
<span style="color: rgba(0, 128, 128, 1)"> 44</span>   <span style="color: rgba(0, 128, 128, 1)">DELX_CONTINUE:</span>   
<span style="color: rgba(0, 128, 128, 1)"> 45</span> <span style="color: rgba(0, 0, 0, 1)">      LOOP   DELX_LP
</span><span style="color: rgba(0, 128, 128, 1)"> 46</span>
<span style="color: rgba(0, 128, 128, 1)"> 47</span>   <span style="color: rgba(0, 128, 128, 1)">DELETEXRET:</span>
<span style="color: rgba(0, 128, 128, 1)"> 48</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span>   AL,<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)">'</span>
<span style="color: rgba(0, 128, 128, 1)"> 49</span>         <span style="color: rgba(0, 0, 255, 1)">STOSB</span>
<span style="color: rgba(0, 128, 128, 1)"> 50</span>         <span style="color: rgba(0, 0, 255, 1)">POP</span><span style="color: rgba(0, 0, 0, 1)">   AX
</span><span style="color: rgba(0, 128, 128, 1)"> 51</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)"> 52</span>         <span style="color: rgba(0, 0, 255, 1)">POP</span><span style="color: rgba(0, 0, 0, 1)">   DI
</span><span style="color: rgba(0, 128, 128, 1)"> 53</span>         <span style="color: rgba(0, 0, 255, 1)">POP</span><span style="color: rgba(0, 0, 0, 1)">   SI
</span><span style="color: rgba(0, 128, 128, 1)"> 54</span>         <span style="color: rgba(0, 0, 255, 1)">POP</span><span style="color: rgba(0, 0, 0, 1)">   BP
</span><span style="color: rgba(0, 128, 128, 1)"> 55</span>         <span style="color: rgba(0, 0, 255, 1)">RET</span>   <span style="color: rgba(128, 0, 128, 1)">4</span>
<span style="color: rgba(0, 128, 128, 1)"> 56</span> <span style="color: rgba(0, 0, 0, 1)">DELX   ENDP
</span><span style="color: rgba(0, 128, 128, 1)"> 57</span>
<span style="color: rgba(0, 128, 128, 1)"> 58</span> <span style="color: rgba(0, 0, 0, 1)">FIND_CH PROC
</span><span style="color: rgba(0, 128, 128, 1)"> 59</span>   <span style="color: rgba(0, 128, 128, 1)">FINDCHAR:</span>
<span style="color: rgba(0, 128, 128, 1)"> 60</span>         <span style="color: rgba(0, 0, 255, 1)">PUSH</span><span style="color: rgba(0, 0, 0, 1)">   BP
</span><span style="color: rgba(0, 128, 128, 1)"> 61</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span><span style="color: rgba(0, 0, 0, 1)">   BP,SP
</span><span style="color: rgba(0, 128, 128, 1)"> 62</span>         <span style="color: rgba(0, 0, 255, 1)">PUSH</span><span style="color: rgba(0, 0, 0, 1)">   AX
</span><span style="color: rgba(0, 128, 128, 1)"> 63</span>         <span style="color: rgba(0, 0, 255, 1)">PUSH</span><span style="color: rgba(0, 0, 0, 1)">    DI
</span><span style="color: rgba(0, 128, 128, 1)"> 64</span>         <span style="color: rgba(0, 0, 255, 1)">PUSH</span><span style="color: rgba(0, 0, 0, 1)">   CX
</span><span style="color: rgba(0, 128, 128, 1)"> 65</span>
<span style="color: rgba(0, 128, 128, 1)"> 66</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span>         AX,
</span><span style="color: rgba(0, 128, 128, 1)"> 67</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span>   DI,
</span><span style="color: rgba(0, 128, 128, 1)"> 68</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span><span style="color: rgba(0, 0, 0, 1)">      CX,LEN
</span><span style="color: rgba(0, 128, 128, 1)"> 69</span>
<span style="color: rgba(0, 128, 128, 1)"> 70</span>         <span style="color: rgba(0, 0, 255, 1)">CLD</span>
<span style="color: rgba(0, 128, 128, 1)"> 71</span>         <span style="color: rgba(0, 0, 255, 1)">REPNZ</span>   <span style="color: rgba(0, 0, 255, 1)">SCASB</span>
<span style="color: rgba(0, 128, 128, 1)"> 72</span>         <span style="color: rgba(0, 0, 255, 1)">JZ</span><span style="color: rgba(0, 0, 0, 1)">         FOUND
</span><span style="color: rgba(0, 128, 128, 1)"> 73</span> <span style="color: rgba(0, 0, 0, 1)">      OUTPUTMSG2
</span><span style="color: rgba(0, 128, 128, 1)"> 74</span>         <span style="color: rgba(0, 0, 255, 1)">JMP</span><span style="color: rgba(0, 0, 0, 1)">   SHORT FINDCHARRET
</span><span style="color: rgba(0, 128, 128, 1)"> 75</span>   <span style="color: rgba(0, 128, 128, 1)">FOUND:</span>
<span style="color: rgba(0, 128, 128, 1)"> 76</span> <span style="color: rgba(0, 0, 0, 1)">      OUTPUT    MSG1
</span><span style="color: rgba(0, 128, 128, 1)"> 77</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span><span style="color: rgba(0, 0, 0, 1)">      DX,OFFSET STR1
</span><span style="color: rgba(0, 128, 128, 1)"> 78</span>         <span style="color: rgba(0, 0, 255, 1)">PUSH</span><span style="color: rgba(0, 0, 0, 1)">   DX
</span><span style="color: rgba(0, 128, 128, 1)"> 79</span>         <span style="color: rgba(0, 0, 255, 1)">PUSH</span><span style="color: rgba(0, 0, 0, 1)">   DX
</span><span style="color: rgba(0, 128, 128, 1)"> 80</span>         <span style="color: rgba(0, 0, 255, 1)">CALL</span><span style="color: rgba(0, 0, 0, 1)">   DELX
</span><span style="color: rgba(0, 128, 128, 1)"> 81</span>   <span style="color: rgba(0, 128, 128, 1)">FINDCHARRET:</span>
<span style="color: rgba(0, 128, 128, 1)"> 82</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)"> 83</span>         <span style="color: rgba(0, 0, 255, 1)">POP</span><span style="color: rgba(0, 0, 0, 1)">   DI
</span><span style="color: rgba(0, 128, 128, 1)"> 84</span>         <span style="color: rgba(0, 0, 255, 1)">POP</span><span style="color: rgba(0, 0, 0, 1)">   AX
</span><span style="color: rgba(0, 128, 128, 1)"> 85</span>         <span style="color: rgba(0, 0, 255, 1)">POP</span><span style="color: rgba(0, 0, 0, 1)">   BP
</span><span style="color: rgba(0, 128, 128, 1)"> 86</span>         <span style="color: rgba(0, 0, 255, 1)">RET</span>   <span style="color: rgba(128, 0, 128, 1)">4</span>
<span style="color: rgba(0, 128, 128, 1)"> 87</span> <span style="color: rgba(0, 0, 0, 1)">FIND_CH ENDP
</span><span style="color: rgba(0, 128, 128, 1)"> 88</span>
<span style="color: rgba(0, 128, 128, 1)"> 89</span> <span style="color: rgba(0, 0, 0, 1)">MAIN    PROC   FAR
</span><span style="color: rgba(0, 128, 128, 1)"> 90</span>   <span style="color: rgba(0, 128, 128, 1)">MAINPROC:</span>
<span style="color: rgba(0, 128, 128, 1)"> 91</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)"> 92</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span><span style="color: rgba(0, 0, 0, 1)">   DS,AX
</span><span style="color: rgba(0, 128, 128, 1)"> 93</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span><span style="color: rgba(0, 0, 0, 1)">   ES,AX
</span><span style="color: rgba(0, 128, 128, 1)"> 94</span>
<span style="color: rgba(0, 128, 128, 1)"> 95</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span><span style="color: rgba(0, 0, 0, 1)">   DX,OFFSET STR1
</span><span style="color: rgba(0, 128, 128, 1)"> 96</span>         <span style="color: rgba(0, 0, 255, 1)">PUSH</span><span style="color: rgba(0, 0, 0, 1)">   DX
</span><span style="color: rgba(0, 128, 128, 1)"> 97</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span><span style="color: rgba(0, 0, 0, 1)">   DL,CHAR
</span><span style="color: rgba(0, 128, 128, 1)"> 98</span>         <span style="color: rgba(0, 0, 255, 1)">XOR</span><span style="color: rgba(0, 0, 0, 1)">   DH,DH
</span><span style="color: rgba(0, 128, 128, 1)"> 99</span>         <span style="color: rgba(0, 0, 255, 1)">PUSH</span><span style="color: rgba(0, 0, 0, 1)">   DX
</span><span style="color: rgba(0, 128, 128, 1)">100</span>         <span style="color: rgba(0, 0, 255, 1)">CALL</span><span style="color: rgba(0, 0, 0, 1)">   FIND_CH
</span><span style="color: rgba(0, 128, 128, 1)">101</span>
<span style="color: rgba(0, 128, 128, 1)">102</span>   <span style="color: rgba(0, 128, 128, 1)">EXIT:</span>   
<span style="color: rgba(0, 128, 128, 1)">103</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)">104</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)">105</span> <span style="color: rgba(0, 0, 0, 1)">MAIN   ENDP
</span><span style="color: rgba(0, 128, 128, 1)">106</span>
<span style="color: rgba(0, 128, 128, 1)">107</span> <span style="color: rgba(0, 0, 0, 1)">CODE   ENDS
</span><span style="color: rgba(0, 128, 128, 1)">108</span>         END   MAIN</pre>
</div>
<h2>1-5 实现效果截图</h2>
<h3>1-5-1 程序运行结果</h3>
<p>&nbsp;<img src="https://img2018.cnblogs.com/blog/1346958/201905/1346958-20190504163822227-270087719.png" alt=""></p>
<p>经验证,发现输出结果符合预期</p>
<h3>1-5-2 查看删除后内存中新的字符串</h3>
<p>&nbsp;<img src="https://img2018.cnblogs.com/blog/1346958/201905/1346958-20190504163828059-1475397461.png" alt=""></p>
<p>经验证,发现内存中的结果符合预期</p>
<h1 align="left">2 程序设计复习2</h1>
<h2>2-1 练习要点</h2>
<ul>
<li>
<p>字符的输入输出</p>
</li>
<li>
<p>数字读入存储逻辑</p>
</li>
<li>
<p>数字的最优输出方式</p>
</li>
</ul>
<h2>2-2 实现思路</h2>
<ul>
<li>
<p>首先为读入字符和输出数字分别单独编写子程序</p>
</li>
<li>
<p>主程序中循环调用读入字符,由于题目固定读入两位十进制数,因此读入的第一个数乘10加上第二个读入的数,即为读入的数字</p>
</li>
<li>
<p><span style="color: rgba(128, 0, 128, 1)">在输出上的改进</span>:仍是除10显示,但这次保存余数。为了得到正序输出,将每次的余数压栈,这样在显示的时候就是从高位向低位显示了。此外,在输出时对前导0进行了过滤处理,需要注意的是当遇到第一个非0数字后,需要将标志位置1,这样以后的数字0就可以正常显示</p>
</li>
</ul>
<h2>2-3 代码实现</h2>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> <span style="color: rgba(0, 0, 0, 1)">STACK   SEGMENT    PARA    STACK
</span><span style="color: rgba(0, 128, 128, 1)">2</span> <span style="color: rgba(0, 0, 0, 1)">      DW      100H DUP(?)
</span><span style="color: rgba(0, 128, 128, 1)">3</span> <span style="color: rgba(0, 0, 0, 1)">STACK    ENDS
</span><span style="color: rgba(0, 128, 128, 1)">4</span>
<span style="color: rgba(0, 128, 128, 1)">5</span> <span style="color: rgba(0, 0, 0, 1)">DATA    SEGMENT    PARA
</span><span style="color: rgba(0, 128, 128, 1)">6</span>   LEN EQU <span style="color: rgba(128, 0, 128, 1)">5</span>
<span style="color: rgba(0, 128, 128, 1)">7</span>   X   DB   <span style="color: rgba(128, 0, 128, 1)">0</span>
<span style="color: rgba(0, 128, 128, 1)">8</span>   Y   DB   <span style="color: rgba(128, 0, 128, 1)">0</span>
<span style="color: rgba(0, 128, 128, 1)">9</span> <span style="color: rgba(0, 0, 0, 1)">    Z   DB   ?
</span><span style="color: rgba(0, 128, 128, 1)"> 10</span>   NL   DB    <span style="color: rgba(128, 0, 128, 1)">13</span>,<span style="color: rgba(128, 0, 128, 1)">10</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)">'</span>
<span style="color: rgba(0, 128, 128, 1)"> 11</span> <span style="color: rgba(0, 0, 0, 1)">DATA   ENDS
</span><span style="color: rgba(0, 128, 128, 1)"> 12</span>
<span style="color: rgba(0, 128, 128, 1)"> 13</span> <span style="color: rgba(0, 0, 0, 1)">CODE   SEGMENT PARA
</span><span style="color: rgba(0, 128, 128, 1)"> 14</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)">SS:</span><span style="color: rgba(0, 0, 0, 1)">STACK
</span><span style="color: rgba(0, 128, 128, 1)"> 15</span> <span style="color: rgba(0, 0, 0, 1)">NEWLINE MACRO
</span><span style="color: rgba(0, 128, 128, 1)"> 16</span>         <span style="color: rgba(0, 0, 255, 1)">PUSH</span><span style="color: rgba(0, 0, 0, 1)">   AX
</span><span style="color: rgba(0, 128, 128, 1)"> 17</span>         <span style="color: rgba(0, 0, 255, 1)">PUSH</span><span style="color: rgba(0, 0, 0, 1)">   DX
</span><span style="color: rgba(0, 128, 128, 1)"> 18</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span><span style="color: rgba(0, 0, 0, 1)">   DX,OFFSET NL
</span><span style="color: rgba(0, 128, 128, 1)"> 19</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span>   AH,<span style="color: rgba(128, 0, 128, 1)">9</span>
<span style="color: rgba(0, 128, 128, 1)"> 20</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)"> 21</span>         <span style="color: rgba(0, 0, 255, 1)">POP</span><span style="color: rgba(0, 0, 0, 1)">   DX
</span><span style="color: rgba(0, 128, 128, 1)"> 22</span>         <span style="color: rgba(0, 0, 255, 1)">POP</span><span style="color: rgba(0, 0, 0, 1)">   AX
</span><span style="color: rgba(0, 128, 128, 1)"> 23</span> <span style="color: rgba(0, 0, 0, 1)">      ENDM
</span><span style="color: rgba(0, 128, 128, 1)"> 24</span> <span style="color: rgba(0, 0, 0, 1)">GETNUMPROC
</span><span style="color: rgba(0, 128, 128, 1)"> 25</span>   <span style="color: rgba(0, 128, 128, 1)">INPUT:</span>
<span style="color: rgba(0, 128, 128, 1)"> 26</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span>   AH,<span style="color: rgba(128, 0, 128, 1)">1</span>
<span style="color: rgba(0, 128, 128, 1)"> 27</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)"> 28</span>         <span style="color: rgba(0, 0, 255, 1)">SUB</span><span style="color: rgba(0, 0, 0, 1)">         AL,30H
</span><span style="color: rgba(0, 128, 128, 1)"> 29</span>         <span style="color: rgba(0, 0, 255, 1)">XOR</span><span style="color: rgba(0, 0, 0, 1)">   AH,AH
</span><span style="color: rgba(0, 128, 128, 1)"> 30</span>         <span style="color: rgba(0, 0, 255, 1)">RET</span>
<span style="color: rgba(0, 128, 128, 1)"> 31</span> <span style="color: rgba(0, 0, 0, 1)">GETNUM   ENDP
</span><span style="color: rgba(0, 128, 128, 1)"> 32</span>
<span style="color: rgba(0, 128, 128, 1)"> 33</span> <span style="color: rgba(0, 0, 0, 1)">OUTPUT   PROC
</span><span style="color: rgba(0, 128, 128, 1)"> 34</span>   <span style="color: rgba(0, 128, 128, 1)">PRINT:</span>
<span style="color: rgba(0, 128, 128, 1)"> 35</span>         <span style="color: rgba(0, 0, 255, 1)">PUSH</span><span style="color: rgba(0, 0, 0, 1)">   DX
</span><span style="color: rgba(0, 128, 128, 1)"> 36</span>         <span style="color: rgba(0, 0, 255, 1)">PUSH</span><span style="color: rgba(0, 0, 0, 1)">   CX
</span><span style="color: rgba(0, 128, 128, 1)"> 37</span>         <span style="color: rgba(0, 0, 255, 1)">PUSH</span><span style="color: rgba(0, 0, 0, 1)">    BX
</span><span style="color: rgba(0, 128, 128, 1)"> 38</span>         <span style="color: rgba(0, 0, 255, 1)">PUSH</span><span style="color: rgba(0, 0, 0, 1)">   AX
</span><span style="color: rgba(0, 128, 128, 1)"> 39</span> <span style="color: rgba(0, 0, 0, 1)">      NEWLINE
</span><span style="color: rgba(0, 128, 128, 1)"> 40</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span><span style="color: rgba(0, 0, 0, 1)">   CX,LEN
</span><span style="color: rgba(0, 128, 128, 1)"> 41</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span>   BX,<span style="color: rgba(128, 0, 128, 1)">10</span>
<span style="color: rgba(0, 128, 128, 1)"> 42</span>   <span style="color: rgba(0, 128, 128, 1)">PRINT_LP1:</span>
<span style="color: rgba(0, 128, 128, 1)"> 43</span>         <span style="color: rgba(0, 0, 255, 1)">XOR</span><span style="color: rgba(0, 0, 0, 1)">   DX,DX
</span><span style="color: rgba(0, 128, 128, 1)"> 44</span>         <span style="color: rgba(0, 0, 255, 1)">DIV</span><span style="color: rgba(0, 0, 0, 1)">      BX
</span><span style="color: rgba(0, 128, 128, 1)"> 45</span>         <span style="color: rgba(0, 0, 255, 1)">PUSH</span><span style="color: rgba(0, 0, 0, 1)">    DX
</span><span style="color: rgba(0, 128, 128, 1)"> 46</span> <span style="color: rgba(0, 0, 0, 1)">      LOOP   PRINT_LP1
</span><span style="color: rgba(0, 128, 128, 1)"> 47</span>
<span style="color: rgba(0, 128, 128, 1)"> 48</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span><span style="color: rgba(0, 0, 0, 1)">   CX,LEN
</span><span style="color: rgba(0, 128, 128, 1)"> 49</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)"> 50</span>   <span style="color: rgba(0, 128, 128, 1)">PRINT_LP2:</span>
<span style="color: rgba(0, 128, 128, 1)"> 51</span>         <span style="color: rgba(0, 0, 255, 1)">POP</span><span style="color: rgba(0, 0, 0, 1)">   DX
</span><span style="color: rgba(0, 128, 128, 1)"> 52</span>         <span style="color: rgba(0, 0, 255, 1)">CMP</span>   DL,<span style="color: rgba(128, 0, 128, 1)">0</span>
<span style="color: rgba(0, 128, 128, 1)"> 53</span>         <span style="color: rgba(0, 0, 255, 1)">JNE</span><span style="color: rgba(0, 0, 0, 1)">      PRINT_LP2_1
</span><span style="color: rgba(0, 128, 128, 1)"> 54</span>         <span style="color: rgba(0, 0, 255, 1)">CMP</span>      BX,<span style="color: rgba(128, 0, 128, 1)">0</span>
<span style="color: rgba(0, 128, 128, 1)"> 55</span>         <span style="color: rgba(0, 0, 255, 1)">JZ</span><span style="color: rgba(0, 0, 0, 1)">         PRINT_LP2_2
</span><span style="color: rgba(0, 128, 128, 1)"> 56</span>   <span style="color: rgba(0, 128, 128, 1)">PRINT_LP2_1:</span>
<span style="color: rgba(0, 128, 128, 1)"> 57</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span>   BX,<span style="color: rgba(128, 0, 128, 1)">1</span>
<span style="color: rgba(0, 128, 128, 1)"> 58</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span>   AH,<span style="color: rgba(128, 0, 128, 1)">2</span>
<span style="color: rgba(0, 128, 128, 1)"> 59</span>         <span style="color: rgba(0, 0, 255, 1)">OR</span><span style="color: rgba(0, 0, 0, 1)">         DL,30H
</span><span style="color: rgba(0, 128, 128, 1)"> 60</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)"> 61</span>         
<span style="color: rgba(0, 128, 128, 1)"> 62</span>   <span style="color: rgba(0, 128, 128, 1)">PRINT_LP2_2:</span>
<span style="color: rgba(0, 128, 128, 1)"> 63</span> <span style="color: rgba(0, 0, 0, 1)">      LOOP   PRINT_LP2
</span><span style="color: rgba(0, 128, 128, 1)"> 64</span>         <span style="color: rgba(0, 0, 255, 1)">POP</span><span style="color: rgba(0, 0, 0, 1)">   AX
</span><span style="color: rgba(0, 128, 128, 1)"> 65</span>         <span style="color: rgba(0, 0, 255, 1)">POP</span><span style="color: rgba(0, 0, 0, 1)">   BX
</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, 255, 1)">POP</span><span style="color: rgba(0, 0, 0, 1)">   DX
</span><span style="color: rgba(0, 128, 128, 1)"> 68</span>         <span style="color: rgba(0, 0, 255, 1)">RET</span>
<span style="color: rgba(0, 128, 128, 1)"> 69</span> <span style="color: rgba(0, 0, 0, 1)">OUTPUT   ENDP
</span><span style="color: rgba(0, 128, 128, 1)"> 70</span>
<span style="color: rgba(0, 128, 128, 1)"> 71</span>
<span style="color: rgba(0, 128, 128, 1)"> 72</span> <span style="color: rgba(0, 0, 0, 1)">MAIN    PROC   FAR
</span><span style="color: rgba(0, 128, 128, 1)"> 73</span>   <span style="color: rgba(0, 128, 128, 1)">MAINPROC:</span>
<span style="color: rgba(0, 128, 128, 1)"> 74</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)"> 75</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span><span style="color: rgba(0, 0, 0, 1)">   DS,AX
</span><span style="color: rgba(0, 128, 128, 1)"> 76</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span><span style="color: rgba(0, 0, 0, 1)">   ES,AX
</span><span style="color: rgba(0, 128, 128, 1)"> 77</span>
<span style="color: rgba(0, 128, 128, 1)"> 78</span>         <span style="color: rgba(0, 0, 255, 1)">CALL</span><span style="color: rgba(0, 0, 0, 1)">   GETNUM
</span><span style="color: rgba(0, 128, 128, 1)"> 79</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span>   BL,<span style="color: rgba(128, 0, 128, 1)">10</span>
<span style="color: rgba(0, 128, 128, 1)"> 80</span>         <span style="color: rgba(0, 0, 255, 1)">MUL</span><span style="color: rgba(0, 0, 0, 1)">      BL
</span><span style="color: rgba(0, 128, 128, 1)"> 81</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span><span style="color: rgba(0, 0, 0, 1)">      X,AL
</span><span style="color: rgba(0, 128, 128, 1)"> 82</span>         <span style="color: rgba(0, 0, 255, 1)">CALL</span><span style="color: rgba(0, 0, 0, 1)">    GETNUM
</span><span style="color: rgba(0, 128, 128, 1)"> 83</span>         <span style="color: rgba(0, 0, 255, 1)">ADD</span><span style="color: rgba(0, 0, 0, 1)">      X,AL
</span><span style="color: rgba(0, 128, 128, 1)"> 84</span>
<span style="color: rgba(0, 128, 128, 1)"> 85</span>         <span style="color: rgba(0, 0, 255, 1)">CALL</span><span style="color: rgba(0, 0, 0, 1)">    GETNUM   
</span><span style="color: rgba(0, 128, 128, 1)"> 86</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span>      BL,<span style="color: rgba(128, 0, 128, 1)">10</span>
<span style="color: rgba(0, 128, 128, 1)"> 87</span>         <span style="color: rgba(0, 0, 255, 1)">MUL</span><span style="color: rgba(0, 0, 0, 1)">      BL
</span><span style="color: rgba(0, 128, 128, 1)"> 88</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span><span style="color: rgba(0, 0, 0, 1)">   Y,AL
</span><span style="color: rgba(0, 128, 128, 1)"> 89</span>         <span style="color: rgba(0, 0, 255, 1)">CALL</span><span style="color: rgba(0, 0, 0, 1)">    GETNUM
</span><span style="color: rgba(0, 128, 128, 1)"> 90</span>         <span style="color: rgba(0, 0, 255, 1)">ADD</span><span style="color: rgba(0, 0, 0, 1)">      Y,AL
</span><span style="color: rgba(0, 128, 128, 1)"> 91</span>
<span style="color: rgba(0, 128, 128, 1)"> 92</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span><span style="color: rgba(0, 0, 0, 1)">   AL,X
</span><span style="color: rgba(0, 128, 128, 1)"> 93</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span><span style="color: rgba(0, 0, 0, 1)">         BL,Y
</span><span style="color: rgba(0, 128, 128, 1)"> 94</span>         <span style="color: rgba(0, 0, 255, 1)">MUL</span><span style="color: rgba(0, 0, 0, 1)">   BL
</span><span style="color: rgba(0, 128, 128, 1)"> 95</span>
<span style="color: rgba(0, 128, 128, 1)"> 96</span>         <span style="color: rgba(0, 0, 255, 1)">CALL</span><span style="color: rgba(0, 0, 0, 1)">   OUTPUT
</span><span style="color: rgba(0, 128, 128, 1)"> 97</span>
<span style="color: rgba(0, 128, 128, 1)"> 98</span>   <span style="color: rgba(0, 128, 128, 1)">EXIT:</span>   
<span style="color: rgba(0, 128, 128, 1)"> 99</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)">100</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)">101</span> <span style="color: rgba(0, 0, 0, 1)">MAIN   ENDP
</span><span style="color: rgba(0, 128, 128, 1)">102</span>
<span style="color: rgba(0, 128, 128, 1)">103</span> <span style="color: rgba(0, 0, 0, 1)">CODE   ENDS
</span><span style="color: rgba(0, 128, 128, 1)">104</span>         END   MAIN</pre>
</div>
<h2>2-4 运行结果</h2>
<p>&nbsp;&nbsp;&nbsp;<img src="https://img2018.cnblogs.com/blog/1346958/201905/1346958-20190504163839074-152571229.png" alt=""></p>
<p>显然,运行结果符合预期。</p>
<h1 align="left">3 程序设计复习3</h1>
<h2>3-1 练习要点</h2>
<ul>
<li>
<p>字符串读取:0AH号中断调用</p>
</li>
<li>
<p>字符串拷贝</p>
</li>
<li>
<p>子程序调用参数的传递与保持</p>
</li>
</ul>
<h2>3-2 实现思路</h2>
<ul>
<li>
<p>首先为读入字符串和输出字符串分别单独编写子程序</p>
</li>
<li>
<p>输入待插入字符串后,首先调用第一次拷贝字符串子程序,判断条件为读取到空格即停止拷贝。<span style="color: rgba(255, 102, 0, 1)">注意边界条件的判断,以及最后一次拷贝后SI与DI的保持</span></p>
</li>
<li>
<p>紧接着在主程序中将SI压栈保存,将SI指向待插入字符串首地址,调用插入子程序。将待插入字符串拼接到目标串尾部</p>
</li>
<li>
<p><span style="color: rgba(0, 128, 0, 1)">最后将SI弹出栈恢复</span>,即又指向原列表空格后的第一个字符的位置处,调用第二次拷贝字符串子程序。此时边界判断条件为’$’符号</p>
</li>
<li>
<p>输出目标串</p>
</li>
</ul>
<h2>3-3 代码实现</h2>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> <span style="color: rgba(0, 0, 0, 1)">STACK   SEGMENT    PARA    STACK
</span><span style="color: rgba(0, 128, 128, 1)">2</span> <span style="color: rgba(0, 0, 0, 1)">      DW      100H DUP(?)
</span><span style="color: rgba(0, 128, 128, 1)">3</span> <span style="color: rgba(0, 0, 0, 1)">STACK    ENDS
</span><span style="color: rgba(0, 128, 128, 1)">4</span>
<span style="color: rgba(0, 128, 128, 1)">5</span> <span style="color: rgba(0, 0, 0, 1)">DATA    SEGMENT    PARA
</span><span style="color: rgba(0, 128, 128, 1)">6</span>   LEN   EQU    <span style="color: rgba(128, 0, 128, 1)">32</span>
<span style="color: rgba(0, 128, 128, 1)">7</span>   LIST    DB    <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">ABOVE ZEBRA$</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, 0, 0, 1)">    TEMP   DB   LEN DUP(?)
</span><span style="color: rgba(0, 128, 128, 1)">9</span>   NL         DB   <span style="color: rgba(128, 0, 128, 1)">13</span>,<span style="color: rgba(128, 0, 128, 1)">10</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)">'</span>
<span style="color: rgba(0, 128, 128, 1)"> 10</span>   STR1    DB    LEN-<span style="color: rgba(128, 0, 128, 1)">1</span>
<span style="color: rgba(0, 128, 128, 1)"> 11</span> <span style="color: rgba(0, 0, 0, 1)">            DB   ?
</span><span style="color: rgba(0, 128, 128, 1)"> 12</span> <span style="color: rgba(0, 0, 0, 1)">            DB   LEN DUP(?)   
</span><span style="color: rgba(0, 128, 128, 1)"> 13</span> <span style="color: rgba(0, 0, 0, 1)">DATA   ENDS
</span><span style="color: rgba(0, 128, 128, 1)"> 14</span>
<span style="color: rgba(0, 128, 128, 1)"> 15</span> <span style="color: rgba(0, 0, 0, 1)">CODE   SEGMENT PARA
</span><span style="color: rgba(0, 128, 128, 1)"> 16</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)">SS:</span><span style="color: rgba(0, 0, 0, 1)">STACK
</span><span style="color: rgba(0, 128, 128, 1)"> 17</span> <span style="color: rgba(0, 0, 0, 1)">NEWLINE MACRO
</span><span style="color: rgba(0, 128, 128, 1)"> 18</span>         <span style="color: rgba(0, 0, 255, 1)">PUSH</span><span style="color: rgba(0, 0, 0, 1)">   DX
</span><span style="color: rgba(0, 128, 128, 1)"> 19</span>         <span style="color: rgba(0, 0, 255, 1)">PUSH</span><span style="color: rgba(0, 0, 0, 1)">    AX
</span><span style="color: rgba(0, 128, 128, 1)"> 20</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span><span style="color: rgba(0, 0, 0, 1)">   DX,OFFSET NL
</span><span style="color: rgba(0, 128, 128, 1)"> 21</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span>   AH,<span style="color: rgba(128, 0, 128, 1)">9</span>
<span style="color: rgba(0, 128, 128, 1)"> 22</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)"> 23</span>         <span style="color: rgba(0, 0, 255, 1)">POP</span><span style="color: rgba(0, 0, 0, 1)">   AX
</span><span style="color: rgba(0, 128, 128, 1)"> 24</span>         <span style="color: rgba(0, 0, 255, 1)">POP</span><span style="color: rgba(0, 0, 0, 1)">   DX      
</span><span style="color: rgba(0, 128, 128, 1)"> 25</span> <span style="color: rgba(0, 0, 0, 1)">      ENDM
</span><span style="color: rgba(0, 128, 128, 1)"> 26</span>
<span style="color: rgba(0, 128, 128, 1)"> 27</span> <span style="color: rgba(0, 0, 0, 1)">OUTPUT   MACRO   MSG
</span><span style="color: rgba(0, 128, 128, 1)"> 28</span>         <span style="color: rgba(0, 0, 255, 1)">PUSH</span><span style="color: rgba(0, 0, 0, 1)">   DX
</span><span style="color: rgba(0, 128, 128, 1)"> 29</span>         <span style="color: rgba(0, 0, 255, 1)">PUSH</span><span style="color: rgba(0, 0, 0, 1)">   AX
</span><span style="color: rgba(0, 128, 128, 1)"> 30</span> <span style="color: rgba(0, 0, 0, 1)">      NEWLINE
</span><span style="color: rgba(0, 128, 128, 1)"> 31</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span><span style="color: rgba(0, 0, 0, 1)">   DX,OFFSET MSG
</span><span style="color: rgba(0, 128, 128, 1)"> 32</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span>   AH,<span style="color: rgba(128, 0, 128, 1)">9</span>
<span style="color: rgba(0, 128, 128, 1)"> 33</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)"> 34</span>         <span style="color: rgba(0, 0, 255, 1)">POP</span><span style="color: rgba(0, 0, 0, 1)">   AX
</span><span style="color: rgba(0, 128, 128, 1)"> 35</span>         <span style="color: rgba(0, 0, 255, 1)">POP</span><span style="color: rgba(0, 0, 0, 1)">   DX
</span><span style="color: rgba(0, 128, 128, 1)"> 36</span> <span style="color: rgba(0, 0, 0, 1)">      ENDM
</span><span style="color: rgba(0, 128, 128, 1)"> 37</span>
<span style="color: rgba(0, 128, 128, 1)"> 38</span> <span style="color: rgba(0, 0, 0, 1)">INPUT   PROC
</span><span style="color: rgba(0, 128, 128, 1)"> 39</span>   <span style="color: rgba(0, 128, 128, 1)">INPUTSTR1:</span>
<span style="color: rgba(0, 128, 128, 1)"> 40</span>         <span style="color: rgba(0, 0, 255, 1)">PUSH</span><span style="color: rgba(0, 0, 0, 1)">   DX
</span><span style="color: rgba(0, 128, 128, 1)"> 41</span>         <span style="color: rgba(0, 0, 255, 1)">PUSH</span><span style="color: rgba(0, 0, 0, 1)">   AX
</span><span style="color: rgba(0, 128, 128, 1)"> 42</span>         <span style="color: rgba(0, 0, 255, 1)">PUSH</span><span style="color: rgba(0, 0, 0, 1)">   SI
</span><span style="color: rgba(0, 128, 128, 1)"> 43</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, 0, 0, 1)">   DX,OFFSET STR1
</span><span style="color: rgba(0, 128, 128, 1)"> 45</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span><span style="color: rgba(0, 0, 0, 1)">   AH,0AH
</span><span style="color: rgba(0, 128, 128, 1)"> 46</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)"> 47</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span>   SI,OFFSET STR1+<span style="color: rgba(128, 0, 128, 1)">2</span>
<span style="color: rgba(0, 128, 128, 1)"> 48</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span>   AL,STR1+<span style="color: rgba(128, 0, 128, 1)">1</span>
<span style="color: rgba(0, 128, 128, 1)"> 49</span>         <span style="color: rgba(0, 0, 255, 1)">XOR</span><span style="color: rgba(0, 0, 0, 1)">   AH,AH
</span><span style="color: rgba(0, 128, 128, 1)"> 50</span>         <span style="color: rgba(0, 0, 255, 1)">ADD</span><span style="color: rgba(0, 0, 0, 1)">   SI,AX
</span><span style="color: rgba(0, 128, 128, 1)"> 51</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span>   BYTE PTR ,<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)">'</span>
<span style="color: rgba(0, 128, 128, 1)"> 52</span>
<span style="color: rgba(0, 128, 128, 1)"> 53</span>         <span style="color: rgba(0, 0, 255, 1)">POP</span><span style="color: rgba(0, 0, 0, 1)">   SI
</span><span style="color: rgba(0, 128, 128, 1)"> 54</span>         <span style="color: rgba(0, 0, 255, 1)">POP</span><span style="color: rgba(0, 0, 0, 1)">   AX
</span><span style="color: rgba(0, 128, 128, 1)"> 55</span>         <span style="color: rgba(0, 0, 255, 1)">POP</span><span style="color: rgba(0, 0, 0, 1)">   DX
</span><span style="color: rgba(0, 128, 128, 1)"> 56</span>         <span style="color: rgba(0, 0, 255, 1)">RET</span>
<span style="color: rgba(0, 128, 128, 1)"> 57</span> <span style="color: rgba(0, 0, 0, 1)">INPUT   ENDP
</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, 0, 0, 1)">COPY   PROC
</span><span style="color: rgba(0, 128, 128, 1)"> 60</span>   <span style="color: rgba(0, 128, 128, 1)">STRCPY:</span>
<span style="color: rgba(0, 128, 128, 1)"> 61</span>         <span style="color: rgba(0, 0, 255, 1)">LODSB</span>
<span style="color: rgba(0, 128, 128, 1)"> 62</span>         <span style="color: rgba(0, 0, 255, 1)">CMP</span><span style="color: rgba(0, 0, 0, 1)">   AL,20H
</span><span style="color: rgba(0, 128, 128, 1)"> 63</span>         <span style="color: rgba(0, 0, 255, 1)">JE</span><span style="color: rgba(0, 0, 0, 1)">         COPYRET
</span><span style="color: rgba(0, 128, 128, 1)"> 64</span>         <span style="color: rgba(0, 0, 255, 1)">STOSB</span>
<span style="color: rgba(0, 128, 128, 1)"> 65</span>         <span style="color: rgba(0, 0, 255, 1)">JMP</span><span style="color: rgba(0, 0, 0, 1)">   STRCPY
</span><span style="color: rgba(0, 128, 128, 1)"> 66</span>   <span style="color: rgba(0, 128, 128, 1)">COPYRET:</span>
<span style="color: rgba(0, 128, 128, 1)"> 67</span>         <span style="color: rgba(0, 0, 255, 1)">STOSB</span>
<span style="color: rgba(0, 128, 128, 1)"> 68</span>         <span style="color: rgba(0, 0, 255, 1)">RET</span>
<span style="color: rgba(0, 128, 128, 1)"> 69</span> <span style="color: rgba(0, 0, 0, 1)">COPY   ENDP
</span><span style="color: rgba(0, 128, 128, 1)"> 70</span>
<span style="color: rgba(0, 128, 128, 1)"> 71</span> <span style="color: rgba(0, 0, 0, 1)">INSERT   PROC
</span><span style="color: rgba(0, 128, 128, 1)"> 72</span>   <span style="color: rgba(0, 128, 128, 1)">INSERT_STR1:</span>
<span style="color: rgba(0, 128, 128, 1)"> 73</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span>   CL,STR1+<span style="color: rgba(128, 0, 128, 1)">1</span>
<span style="color: rgba(0, 128, 128, 1)"> 74</span>         <span style="color: rgba(0, 0, 255, 1)">XOR</span><span style="color: rgba(0, 0, 0, 1)">   CH,CH
</span><span style="color: rgba(0, 128, 128, 1)"> 75</span>   <span style="color: rgba(0, 128, 128, 1)">INSERT_LP:</span>
<span style="color: rgba(0, 128, 128, 1)"> 76</span>         <span style="color: rgba(0, 0, 255, 1)">LODSB</span>
<span style="color: rgba(0, 128, 128, 1)"> 77</span>         <span style="color: rgba(0, 0, 255, 1)">STOSB</span>
<span style="color: rgba(0, 128, 128, 1)"> 78</span> <span style="color: rgba(0, 0, 0, 1)">      LOOP   INSERT_LP
</span><span style="color: rgba(0, 128, 128, 1)"> 79</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span><span style="color: rgba(0, 0, 0, 1)">   AL,20H
</span><span style="color: rgba(0, 128, 128, 1)"> 80</span>         <span style="color: rgba(0, 0, 255, 1)">STOSB</span>
<span style="color: rgba(0, 128, 128, 1)"> 81</span>         <span style="color: rgba(0, 0, 255, 1)">RET</span>
<span style="color: rgba(0, 128, 128, 1)"> 82</span> <span style="color: rgba(0, 0, 0, 1)">INSERT   ENDP
</span><span style="color: rgba(0, 128, 128, 1)"> 83</span>
<span style="color: rgba(0, 128, 128, 1)"> 84</span> <span style="color: rgba(0, 0, 0, 1)">COPY2   PROC
</span><span style="color: rgba(0, 128, 128, 1)"> 85</span>   <span style="color: rgba(0, 128, 128, 1)">STRCPY2:</span>
<span style="color: rgba(0, 128, 128, 1)"> 86</span>         <span style="color: rgba(0, 0, 255, 1)">LODSB</span>
<span style="color: rgba(0, 128, 128, 1)"> 87</span>         <span style="color: rgba(0, 0, 255, 1)">CMP</span>   AL,<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)">'</span>
<span style="color: rgba(0, 128, 128, 1)"> 88</span>         <span style="color: rgba(0, 0, 255, 1)">JE</span><span style="color: rgba(0, 0, 0, 1)">         COPYRET2
</span><span style="color: rgba(0, 128, 128, 1)"> 89</span>         <span style="color: rgba(0, 0, 255, 1)">STOSB</span>
<span style="color: rgba(0, 128, 128, 1)"> 90</span>         <span style="color: rgba(0, 0, 255, 1)">JMP</span><span style="color: rgba(0, 0, 0, 1)">   STRCPY2
</span><span style="color: rgba(0, 128, 128, 1)"> 91</span>   <span style="color: rgba(0, 128, 128, 1)">COPYRET2:</span>
<span style="color: rgba(0, 128, 128, 1)"> 92</span>         <span style="color: rgba(0, 0, 255, 1)">STOSB</span>
<span style="color: rgba(0, 128, 128, 1)"> 93</span>         <span style="color: rgba(0, 0, 255, 1)">RET</span>
<span style="color: rgba(0, 128, 128, 1)"> 94</span> <span style="color: rgba(0, 0, 0, 1)">COPY2   ENDP
</span><span style="color: rgba(0, 128, 128, 1)"> 95</span>
<span style="color: rgba(0, 128, 128, 1)"> 96</span> <span style="color: rgba(0, 0, 0, 1)">MAIN    PROC   FAR
</span><span style="color: rgba(0, 128, 128, 1)"> 97</span>   <span style="color: rgba(0, 128, 128, 1)">MAINPROC:</span>
<span style="color: rgba(0, 128, 128, 1)"> 98</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)"> 99</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span><span style="color: rgba(0, 0, 0, 1)">   DS,AX
</span><span style="color: rgba(0, 128, 128, 1)">100</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span><span style="color: rgba(0, 0, 0, 1)">   ES,AX
</span><span style="color: rgba(0, 128, 128, 1)">101</span> <span style="color: rgba(0, 0, 0, 1)">      OUTPUT   LIST
</span><span style="color: rgba(0, 128, 128, 1)">102</span>         <span style="color: rgba(0, 0, 255, 1)">CALL</span><span style="color: rgba(0, 0, 0, 1)">   INPUT
</span><span style="color: rgba(0, 128, 128, 1)">103</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span><span style="color: rgba(0, 0, 0, 1)">   SI,OFFSET LIST
</span><span style="color: rgba(0, 128, 128, 1)">104</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span><span style="color: rgba(0, 0, 0, 1)">   DI,OFFSET TEMP
</span><span style="color: rgba(0, 128, 128, 1)">105</span>         <span style="color: rgba(0, 0, 255, 1)">CALL</span><span style="color: rgba(0, 0, 0, 1)">   COPY
</span><span style="color: rgba(0, 128, 128, 1)">106</span>         <span style="color: rgba(0, 0, 255, 1)">PUSH</span><span style="color: rgba(0, 0, 0, 1)">   SI
</span><span style="color: rgba(0, 128, 128, 1)">107</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span>   SI,OFFSET STR1+<span style="color: rgba(128, 0, 128, 1)">2</span>
<span style="color: rgba(0, 128, 128, 1)">108</span>         <span style="color: rgba(0, 0, 255, 1)">CALL</span><span style="color: rgba(0, 0, 0, 1)">   INSERT
</span><span style="color: rgba(0, 128, 128, 1)">109</span>         <span style="color: rgba(0, 0, 255, 1)">POP</span><span style="color: rgba(0, 0, 0, 1)">   SI
</span><span style="color: rgba(0, 128, 128, 1)">110</span>         <span style="color: rgba(0, 0, 255, 1)">CALL</span><span style="color: rgba(0, 0, 0, 1)">   COPY2
</span><span style="color: rgba(0, 128, 128, 1)">111</span> <span style="color: rgba(0, 0, 0, 1)">      OUTPUT   TEMP
</span><span style="color: rgba(0, 128, 128, 1)">112</span>
<span style="color: rgba(0, 128, 128, 1)">113</span>   <span style="color: rgba(0, 128, 128, 1)">EXIT:</span>   
<span style="color: rgba(0, 128, 128, 1)">114</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)">115</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)">116</span> <span style="color: rgba(0, 0, 0, 1)">MAIN   ENDP
</span><span style="color: rgba(0, 128, 128, 1)">117</span>
<span style="color: rgba(0, 128, 128, 1)">118</span> <span style="color: rgba(0, 0, 0, 1)">CODE   ENDS
</span><span style="color: rgba(0, 128, 128, 1)">119</span>         END   MAIN</pre>
</div>
<h2>3-4 运行结果</h2>
<p>&nbsp;<img src="https://img2018.cnblogs.com/blog/1346958/201905/1346958-20190504163848075-1795502551.png" alt=""></p>
<h1 align="left">4 程序设计复习4</h1>
<h2 align="left">4-1 练习要点</h2>
<ul>
<li>
<p>16进制输出方式</p>
</li>
<li>
<p>从10向A的转化</p>
</li>
<li>
<p>2号中断调用输出单个字符</p>
</li>
</ul>
<h2>4-2 实现思路</h2>
<ul>
<li>
<p>首先在数据段初始化一个64位数字</p>
</li>
<li>
<p>注意由于一个字是2个字节16位,因此在输出时,<span style="color: rgba(255, 102, 0, 1)">要依次在基地址的基础上+2</span></p>
</li>
<li>
<p>由于是循环访问数据段中的除数,因此用SI寄存器记录数据段中除数的位置,每次循环都要<span style="color: rgba(0, 128, 0, 1)">使用两次INC指令</span>,保证访问到下一个字中的内容。</p>
</li>
<li>
<p>访问除数<span style="color: rgba(128, 0, 128, 1)">必须用WORD PTR </span>,否则会提示 ’must have size’</p>
</li>
<li>
<p>判断16进制输出的数字是否大于10,若不大于则直接输出,否则需要加7(在ASCII数值上‘9’和‘A’之间差8),<span style="color: rgba(255, 0, 0, 1)">注意从数字转换为ASCII码此处必须用ADD 30H 来代替 OR 30H</span>,否则会出现错误。</p>
</li>
</ul>
<h2>4-3 代码实现</h2>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 0, 1)">STACK   SEGMENT    PARA    STACK
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 0, 0, 1)">      DW      100H DUP(?)
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span> <span style="color: rgba(0, 0, 0, 1)">STACK    ENDS
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span>
<span style="color: rgba(0, 128, 128, 1)"> 5</span> <span style="color: rgba(0, 0, 0, 1)">DATA    SEGMENT    PARA
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 0, 0, 1)">    NUM   DW   1606H,1160H,1234H,0FFFFH
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 0, 0, 1)">    DIVISOR DW   1000H,100H,10H,1H
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 0, 0, 1)">DATA   ENDS
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span>
<span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(0, 0, 0, 1)">CODE   SEGMENT PARA
</span><span style="color: rgba(0, 128, 128, 1)">11</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)">SS:</span><span style="color: rgba(0, 0, 0, 1)">STACK
</span><span style="color: rgba(0, 128, 128, 1)">12</span>
<span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(0, 0, 0, 1)">OUTPUT   PROC
</span><span style="color: rgba(0, 128, 128, 1)">14</span>   <span style="color: rgba(0, 128, 128, 1)">PRINT:</span>
<span style="color: rgba(0, 128, 128, 1)">15</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span><span style="color: rgba(0, 0, 0, 1)">   SI,OFFSET DIVISOR
</span><span style="color: rgba(0, 128, 128, 1)">16</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span>   CX,<span style="color: rgba(128, 0, 128, 1)">4</span>
<span style="color: rgba(0, 128, 128, 1)">17</span>   <span style="color: rgba(0, 128, 128, 1)">OUTPUT_LP:</span>
<span style="color: rgba(0, 128, 128, 1)">18</span>         <span style="color: rgba(0, 0, 255, 1)">XOR</span><span style="color: rgba(0, 0, 0, 1)">   DX,DX
</span><span style="color: rgba(0, 128, 128, 1)">19</span>         <span style="color: rgba(0, 0, 255, 1)">DIV</span><span style="color: rgba(0, 0, 0, 1)">   WORD PTR
</span><span style="color: rgba(0, 128, 128, 1)">20</span>         <span style="color: rgba(0, 0, 255, 1)">PUSH</span><span style="color: rgba(0, 0, 0, 1)">   DX
</span><span style="color: rgba(0, 128, 128, 1)">21</span>         <span style="color: rgba(0, 0, 255, 1)">CMP</span>   AL,<span style="color: rgba(128, 0, 128, 1)">10</span>
<span style="color: rgba(0, 128, 128, 1)">22</span>         <span style="color: rgba(0, 0, 255, 1)">JB</span><span style="color: rgba(0, 0, 0, 1)">      OUTPUT_CONTINUE
</span><span style="color: rgba(0, 128, 128, 1)">23</span>         <span style="color: rgba(0, 0, 255, 1)">ADD</span>   AL,<span style="color: rgba(128, 0, 128, 1)">7</span>
<span style="color: rgba(0, 128, 128, 1)">24</span>   <span style="color: rgba(0, 128, 128, 1)">OUTPUT_CONTINUE:</span>
<span style="color: rgba(0, 128, 128, 1)">25</span>         <span style="color: rgba(0, 0, 255, 1)">ADD</span><span style="color: rgba(0, 0, 0, 1)">   AL,30H
</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)">   DL,AL
</span><span style="color: rgba(0, 128, 128, 1)">27</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span>   AH,<span style="color: rgba(128, 0, 128, 1)">2</span>
<span style="color: rgba(0, 128, 128, 1)">28</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)">29</span>         <span style="color: rgba(0, 0, 255, 1)">INC</span><span style="color: rgba(0, 0, 0, 1)">   SI
</span><span style="color: rgba(0, 128, 128, 1)">30</span>         <span style="color: rgba(0, 0, 255, 1)">INC</span><span style="color: rgba(0, 0, 0, 1)">   SI
</span><span style="color: rgba(0, 128, 128, 1)">31</span>         <span style="color: rgba(0, 0, 255, 1)">POP</span><span style="color: rgba(0, 0, 0, 1)">   AX
</span><span style="color: rgba(0, 128, 128, 1)">32</span> <span style="color: rgba(0, 0, 0, 1)">      LOOP   OUTPUT_LP
</span><span style="color: rgba(0, 128, 128, 1)">33</span>         <span style="color: rgba(0, 0, 255, 1)">RET</span>
<span style="color: rgba(0, 128, 128, 1)">34</span> <span style="color: rgba(0, 0, 0, 1)">OUTPUT   ENDP
</span><span style="color: rgba(0, 128, 128, 1)">35</span>
<span style="color: rgba(0, 128, 128, 1)">36</span> <span style="color: rgba(0, 0, 0, 1)">MAIN    PROC   FAR
</span><span style="color: rgba(0, 128, 128, 1)">37</span>   <span style="color: rgba(0, 128, 128, 1)">MAINPROC:</span>
<span style="color: rgba(0, 128, 128, 1)">38</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)">39</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span><span style="color: rgba(0, 0, 0, 1)">   DS,AX
</span><span style="color: rgba(0, 128, 128, 1)">40</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span><span style="color: rgba(0, 0, 0, 1)">   ES,AX
</span><span style="color: rgba(0, 128, 128, 1)">41</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, 0, 0, 1)">   AX,NUM
</span><span style="color: rgba(0, 128, 128, 1)">43</span>         <span style="color: rgba(0, 0, 255, 1)">CALL</span><span style="color: rgba(0, 0, 0, 1)">   OUTPUT
</span><span style="color: rgba(0, 128, 128, 1)">44</span>
<span style="color: rgba(0, 128, 128, 1)">45</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span>   AX,NUM+<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, 255, 1)">CALL</span><span style="color: rgba(0, 0, 0, 1)">   OUTPUT
</span><span style="color: rgba(0, 128, 128, 1)">47</span>
<span style="color: rgba(0, 128, 128, 1)">48</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span>   AX,NUM+<span style="color: rgba(128, 0, 128, 1)">4</span>
<span style="color: rgba(0, 128, 128, 1)">49</span>         <span style="color: rgba(0, 0, 255, 1)">CALL</span><span style="color: rgba(0, 0, 0, 1)">   OUTPUT
</span><span style="color: rgba(0, 128, 128, 1)">50</span>
<span style="color: rgba(0, 128, 128, 1)">51</span>         <span style="color: rgba(0, 0, 255, 1)">MOV</span>   AX,NUM+<span style="color: rgba(128, 0, 128, 1)">6</span>
<span style="color: rgba(0, 128, 128, 1)">52</span>         <span style="color: rgba(0, 0, 255, 1)">CALL</span><span style="color: rgba(0, 0, 0, 1)">   OUTPUT
</span><span style="color: rgba(0, 128, 128, 1)">53</span>
<span style="color: rgba(0, 128, 128, 1)">54</span>   <span style="color: rgba(0, 128, 128, 1)">EXIT:</span>   
<span style="color: rgba(0, 128, 128, 1)">55</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)">56</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)">57</span> <span style="color: rgba(0, 0, 0, 1)">MAIN   ENDP
</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, 0, 0, 1)">CODE   ENDS
</span><span style="color: rgba(0, 128, 128, 1)">60</span>         END   MAIN</pre>
</div>
<h2>4-4 运行结果</h2>
<p align="left">【数据段】</p>
<p align="left">&nbsp;<img src="https://img2018.cnblogs.com/blog/1346958/201905/1346958-20190504163858198-73725858.png" alt=""></p>
<p align="left">【运行结果】</p>
<p>&nbsp;<img src="https://img2018.cnblogs.com/blog/1346958/201905/1346958-20190504163906728-1442215233.png" alt=""></p>
<p align="center">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</p><br><br>
来源:https://www.cnblogs.com/chrischen98/p/10808861.html
頁: [1]
查看完整版本: x86汇编语言实践(4)