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> <img src="https://img2018.cnblogs.com/blog/1346958/201905/1346958-20190504163822227-270087719.png" alt=""></p>
<p>经验证,发现输出结果符合预期</p>
<h3>1-5-2 查看删除后内存中新的字符串</h3>
<p> <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> <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> <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"> <img src="https://img2018.cnblogs.com/blog/1346958/201905/1346958-20190504163858198-73725858.png" alt=""></p>
<p align="left">【运行结果】</p>
<p> <img src="https://img2018.cnblogs.com/blog/1346958/201905/1346958-20190504163906728-1442215233.png" alt=""></p>
<p align="center"> </p><br><br>
来源:https://www.cnblogs.com/chrischen98/p/10808861.html
頁:
[1]