汇编语言程序设计 实验2 汇编源程序编写与汇编、调试
<h1 style="text-align: center">汇编语言程序设计 实验2 汇编源程序编写与汇编、调试</h1><h2>一、实验目的</h2>
<p style="margin-left: 30px"><span class="fontstyle0">1. </span><span class="fontstyle2">理解并掌握汇编源程序组成与结构<br></span><span class="fontstyle0">2. </span><span class="fontstyle2">掌握汇编语言源程序编写</span><span class="fontstyle3">→</span><span class="fontstyle2">汇编</span><span class="fontstyle3">→</span><span class="fontstyle2">链接</span><span class="fontstyle3">→</span><span class="fontstyle2">调试的工具和方法<br></span><span class="fontstyle0">3. </span><span class="fontstyle2">理解汇编源程序中地址表示、段寄存器的用法<br></span><span class="fontstyle0">4. </span><span class="fontstyle2">理解和掌握寄存器间接寻址方式</span><span class="fontstyle0"><br>5. </span><span class="fontstyle2">通过汇编指令</span><span class="fontstyle0">loop</span><span class="fontstyle2">的使用理解编程语言中循环的本质</span> </p>
<h2>二、实验内容及结果</h2>
<h3>(一)实验任务一</h3>
<p><span class="fontstyle0">使用任意一款文本编辑器,编写</span><span class="fontstyle1">8086</span><span class="fontstyle0">汇编源程序</span><span class="fontstyle1">ex1.asm</span><span class="fontstyle0">。源代码如下:</span> </p>
<div class="cnblogs_code">
<pre>assume cs:code
code segment
mov ax, 0b810h
mov ds, ax
mov byte ptr ds:, 1
mov byte ptr ds:, 1
mov byte ptr ds:, 2
mov byte ptr ds:, 2
mov byte ptr ds:, 3
mov byte ptr ds:, 3
mov byte ptr ds:, 4
mov byte ptr ds:, 4
mov ah, 4ch
int 21h
code ends
end</pre>
</div>
<p><span class="fontstyle0">要求:使用</span><span class="fontstyle1">8086</span><span class="fontstyle0">汇编程序编写、汇编、链接、运行、调试方法,对</span><span class="fontstyle1">ex1.asm</span><span class="fontstyle0">进行汇编、链接、运行,使<span class="fontstyle0">用</span><span class="fontstyle1">debug</span><span class="fontstyle0">工具调试可执行文件。</span><br></span><span class="fontstyle0">使用</span><span class="fontstyle2">masm</span><span class="fontstyle0">、</span><span class="fontstyle2">link</span><span class="fontstyle0">对</span><span class="fontstyle1">ex1.asm</span><span class="fontstyle0">进行汇编、链接,得到可执行文件</span><span class="fontstyle2">ex1.exe</span><span class="fontstyle0">,运行并观察结果。<br>使用</span><span class="fontstyle2">debug</span><span class="fontstyle0">工具对程序进行调试<br>使用</span><span class="fontstyle1">debug</span><span class="fontstyle0">加载可执行文件</span><span class="fontstyle1">ex1.exe</span><span class="fontstyle0">后,使用</span><span class="fontstyle2" style="color: rgba(0, 0, 255, 1)">d</span><span class="fontstyle3">命令</span><span class="fontstyle0">查看程序段前缀</span><span class="fontstyle1">PSP</span><span class="fontstyle0">所占的</span><span class="fontstyle1">256</span><span class="fontstyle0">个字节。<br>结合可执行文件中寄存器</span><span class="fontstyle1">CX</span><span class="fontstyle0">的值,使用</span><span class="fontstyle2" style="color: rgba(0, 0, 255, 1)">u</span><span class="fontstyle3">命令</span><span class="fontstyle0">对</span><span class="fontstyle2">ex1.exe</span><span class="fontstyle0">进行精确反汇编<br>使用</span><span class="fontstyle2" style="color: rgba(0, 0, 255, 1)">g</span><span class="fontstyle3">命令</span><span class="fontstyle0">执行到程序退出执行之前(即源码文件中</span><span class="fontstyle1">line16</span><span class="fontstyle0">之前</span><span class="fontstyle1">)</span><span class="fontstyle0">,观察结果。</span> </p>
<p>1、首先使用masm对*.asm文件进行编译,生成包含机器代码的目标文件(*.obj)</p>
<p><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201030134344741-2021131283.png"></p>
<p>编译后没有问题(截图中能看到提示说:0 Warning Errors和0 Severe Errors)这时候再返回到文件夹中就会发现多了一个.obj文件</p>
<p> <img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201030134750772-1005327709.png"></p>
<p class="MsoNormal">对<span lang="EN-US"> *.obj </span>目标文件进行连接,得到可执行文件<span lang="EN-US">(.exe</span>文件<span lang="EN-US">)</span>。运行<span lang="EN-US">link</span>后,首先显示一些版本信息,然后提示输入将要被连接的目标文件的名称。注意,<span lang="EN-US">“[.OBJ]”</span>提示我们,默认的文件扩展名是<span lang="EN-US">obj</span>,<span lang="EN-US">**</span>比如要连接的目标文件名是<span lang="EN-US">“xxx.obj”</span>,只要在这里输入<span lang="EN-US">“xxx”</span>即可。<span lang="EN-US">**</span>可如果文件不是以<span lang="EN-US">
obj </span>为扩展名,就要输入它的全名。比如目标文件名为<span lang="EN-US">“ xxx.bin ”</span>,就要输入全名。</p>
<p class="MsoNormal"><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201030134921995-588419740.png"></p>
<p class="MsoNormal">最后一行有提示信息:no stack segment,在网上查了意思,得知是:<span style="color: rgba(77, 77, 77, 1); font-family: -apple-system, "SF UI Text", Arial, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif; font-size: 18px; font-variant-ligatures: common-ligatures">程序中没有安排堆栈段。这个警告可以忽略,程序能够运行,并且得到正确的结果。</span></p>
<p>在这里即可运行ex1.exe文件,得到结果:</p>
<p><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201030135557343-940712258.png"></p>
<p>2、使用debug工具对程序进行调试</p>
<p>首先使用d命令查看<span class="fontstyle0">程序段前缀</span><span class="fontstyle1">PSP</span><span class="fontstyle0">所占的</span><span class="fontstyle1">256</span><span class="fontstyle0">个字节,结果如下图所示:<br><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201030140101553-990093373.png"><br></span></p>
<p><span class="fontstyle0"><span class="fontstyle0">再使用</span><span class="fontstyle2" style="color: rgba(0, 0, 255, 1)">u</span><span class="fontstyle3">命令</span><span class="fontstyle0">对</span><span class="fontstyle2">ex1.exe</span><span class="fontstyle0">进行精确反汇编,首先可以借助r命令:</span></span></p>
<p><span class="fontstyle0"><span class="fontstyle0"><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201030140238569-472856836.png"></span></span></p>
<p> 故u命令应为:</p>
<div class="cnblogs_code">
<pre>-u 076A:<span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">30</span></pre>
</div>
<p>结果如下:</p>
<p><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201030140352214-819821611.png"></p>
<p>由上述结果可以观察到,若要使用g<span class="fontstyle3">命令</span><span class="fontstyle0">执行到程序退出执行之前(即源码文件中</span><span class="fontstyle1">line16</span><span class="fontstyle0">之前</span><span class="fontstyle1">)</span><span class="fontstyle0">,代码为:</span></p>
<div class="cnblogs_code">
<pre>-g <span style="color: rgba(128, 0, 128, 1)">0028</span></pre>
</div>
<p><span class="fontstyle0">结果如下所示:</span></p>
<p><span class="fontstyle0"><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201030140654201-134247907.png"></span></p>
<h3>(二)实验任务二</h3>
<p><span class="fontstyle0">使用任意一款文本编辑器,编写</span><span class="fontstyle1">8086</span><span class="fontstyle0">汇编源程序</span><span class="fontstyle1">ex2.asm</span><span class="fontstyle0">。源代码如下:</span> </p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">assume cs:code
code segment
mov ax,0b810h
mov ds,ax
mov bx,0
mov ax,101H
mov cx,4
s: mov ,ax
add bx,2
add ax,101H
loop s
mov ah,4ch
int 21h
code ends
end</span></pre>
</div>
<p><span class="fontstyle0">要求:使用</span><span class="fontstyle1">8086</span><span class="fontstyle0">汇编程序编写、汇编、链接、运行、调试方法,对</span><span class="fontstyle1">ex2.asm</span><span class="fontstyle0">进行汇编、链接、运行,使用debug工具调试可执行文件。</span><span class="fontstyle0"><br>使用</span><span class="fontstyle2">masm</span><span class="fontstyle0">、</span><span class="fontstyle2">link</span><span class="fontstyle0">对</span><span class="fontstyle1">ex2.asm</span><span class="fontstyle0">进行汇编、链接,得到可执行文件</span><span class="fontstyle2">ex2.exe</span><span class="fontstyle0">,运行并观察结果。<br>使用</span><span class="fontstyle2">debug</span><span class="fontstyle0">工具对程序进行调试。<br>结合可执行文件中寄存器</span><span class="fontstyle1">CX</span><span class="fontstyle0">的值,使用</span><span class="fontstyle2" style="color: rgba(0, 0, 255, 1)">u</span><span class="fontstyle3">命令</span><span class="fontstyle0">对</span><span class="fontstyle2">ex2.exe</span><span class="fontstyle0">进行精确反汇编<br>灵活使用</span><span class="fontstyle2" style="color: rgba(0, 0, 255, 1)">t</span><span class="fontstyle3">命令、</span><span class="fontstyle2" style="color: rgba(0, 0, 255, 1)">p</span><span class="fontstyle3">命令、</span><span class="fontstyle2" style="color: rgba(0, 0, 255, 1)">g</span><span class="fontstyle3">命令</span><span class="fontstyle0">,对</span><span class="fontstyle2">ex2.exe</span><span class="fontstyle0">进行调试。(不一定要单步,有些地方可以用</span><span class="fontstyle1">g命令,一次执行多行汇编指令)</span><span class="fontstyle0"><br></span><span class="fontstyle0" style="color: rgba(255, 0, 0, 1)">注意:单步调试时,对于循环指令</span><span class="fontstyle1" style="color: rgba(255, 0, 0, 1)">loop, </span><span class="fontstyle0" style="color: rgba(255, 0, 0, 1)">中断指令</span><span class="fontstyle1" style="color: rgba(255, 0, 0, 1)">int</span><span class="fontstyle0" style="color: rgba(255, 0, 0, 1)">,使用</span><span class="fontstyle1" style="color: rgba(255, 0, 0, 1)">t</span><span class="fontstyle0" style="color: rgba(255, 0, 0, 1)">命令和</span><span class="fontstyle1" style="color: rgba(255, 0, 0, 1)">p</span><span class="fontstyle0" style="color: rgba(255, 0, 0, 1)">命令单步调试的区别。<br></span><span class="fontstyle0">把</span><span class="fontstyle1">ex2.asm</span><span class="fontstyle0">中</span><span class="fontstyle1">line9 </span><span class="fontstyle5">mov cx, 4 </span><span class="fontstyle0">改成 </span><span class="fontstyle5">mov cx, 8 </span><span class="fontstyle0">,保存后重新汇编、链接、运行并观察结果。<br>结合上述实验和观察,分析、对比</span><span class="fontstyle1">ex2.asm</span><span class="fontstyle0">和</span><span class="fontstyle1">ex1.asm</span><span class="fontstyle0">,它们实现的是否是相同的功能和效果?在具体实现上有什么不同?</span></p>
<p><span class="fontstyle0">1、与实验任务一中的操作步骤类似,同样可以</span><span class="fontstyle0">对</span><span class="fontstyle1">ex2.asm</span><span class="fontstyle0">进行汇编、链接,得到可执行文件</span><span class="fontstyle2">ex2.exe,结果如下:</span></p>
<p><span class="fontstyle2"><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201030141420259-1373234736.png"></span></p>
<p><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201030141444729-2003845055.png"></p>
<p>2、使用debug工具对程序进行调试</p>
<p><span class="fontstyle0">首先可以结合可执行文件中寄存器</span><span class="fontstyle1">CX</span><span class="fontstyle0">的值,使用u命</span><span class="fontstyle3">令</span><span class="fontstyle0">对</span><span class="fontstyle2">ex2.exe</span><span class="fontstyle0">进行精确反汇编,和之前的操作步骤一样,先使用r命令查看相关信息:</span></p>
<p><span class="fontstyle0"><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201030141902284-697887926.png"></span></p>
<p> 故可以得到u命令为:</p>
<div class="cnblogs_code">
<pre>-u 076A:<span style="color: rgba(128, 0, 128, 1)">0</span> 001B</pre>
</div>
<p>运行结果如下所示:</p>
<p><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201030142203279-1584509507.png"></p>
<p><span class="fontstyle0">再可以灵活使用</span><span class="fontstyle2" style="color: rgba(0, 0, 255, 1)">t</span><span class="fontstyle3">命令、</span><span class="fontstyle2" style="color: rgba(0, 0, 255, 1)">p</span><span class="fontstyle3">命令、</span><span class="fontstyle2" style="color: rgba(0, 0, 255, 1)">g</span><span class="fontstyle3">命令</span><span class="fontstyle0">,对</span><span class="fontstyle2">ex2.exe</span><span class="fontstyle0">进行调试,在这里关于如何使用这些命令,想法是:大部分命令都使用t命令单步执行来调试,但是遇到INT命令或者LOOP命令的时候,使用p命令来调试,因为INT命令类似于高级语言中的函数,如果这个时候还使用t命令的话,会相当于进入到函数内部,但是内部的调试过程不是我们想看到的,故在这里可以使用p命令来调试,而LOOP命令则是循环,我们不需要看到循环的过程,故也使用p命令。</span><span class="fontstyle0">调试结果如下所示:</span></p>
<p><span class="fontstyle0"><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201030143458277-528023651.png"></span></p>
<p><span class="fontstyle0"><span class="fontstyle0">把</span><span class="fontstyle1">ex2.asm</span><span class="fontstyle0">中</span><span class="fontstyle1">line9 </span><span class="fontstyle5">mov cx, 4 </span><span class="fontstyle0">改成 </span><span class="fontstyle5">mov cx, 8 </span><span class="fontstyle0">,保存后重新汇编、链接、运行并观察结果<span style="color: rgba(255, 0, 0, 1)">(由于前面的汇编链接运行过程存在重复内容,故这里不再赘述,只展示最后的结果)</span></span></span></p>
<p><span class="fontstyle0"><span class="fontstyle0"><span style="color: rgba(255, 0, 0, 1)"><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201030143922161-1890432926.png"></span></span></span></p>
<p> </p>
<p>小结:</p>
<p><span class="fontstyle0">对比</span><span class="fontstyle1">ex2.asm</span><span class="fontstyle0">和</span><span class="fontstyle1">ex1.asm</span>实现的是相同的功能,都是再屏幕上打印图案。但是在具体实现上有所不同。具体体现在循环次数,结果也很好的显示了这一效果,修改前是四个图案,修改后则打印输出了8个图案。</p>
<h3>(三)实验任务三</h3>
<p><span class="fontstyle0">综合使用</span><span class="fontstyle1">loop,</span><span class="fontstyle0">,编写完整汇编程序,实现向内存</span><span class="fontstyle2">b800:07b8</span><span class="fontstyle0">开始的连续</span><span class="fontstyle1">16</span><span class="fontstyle0">个字单元重复填充字数据<span class="fontstyle2">0237H</span><span class="fontstyle0">。</span><br></span><span class="fontstyle0">要求:<br>编写汇编源程序<br>给出运行结果截图</span> </p>
<p>代码为:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">assume cs:code
code segment
mov ax, 0b800h
mov ds, ax
mov bx, 07b8h
mov cx, 000fh
s: mov , 0237h
inc bx
inc bx
loop s
mov ax, 4c00h
</span><span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> 21h
code ends
end</span></pre>
</div>
<p>运行过程为:</p>
<p><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201030144428401-909095109.png"></p>
<p>最后的运行结果为:</p>
<p><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201030144446206-164903558.png"></p>
<p>可以看出,与预期结果完全一致。接下来<span class="fontstyle0">把填充的字数据,从</span><span class="fontstyle1">0237H </span><span class="fontstyle0">改成</span><span class="fontstyle1">0239H,运行结果为:</span><span class="fontstyle0"><br></span></p>
<p><span class="fontstyle1"><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201030144715444-63847432.png"></span></p>
<p><span class="fontstyle0">把填充的字数据,从</span><span class="fontstyle1">0237H </span><span class="fontstyle0">改成</span><span class="fontstyle1">0437H</span><span class="fontstyle0">后的结果为:</span></p>
<p><span class="fontstyle0"><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201030144819601-1279904265.png"></span></p>
<p><span style="color: rgba(255, 0, 0, 1)"><strong><span class="fontstyle0"><span style="font-family: Arial, Helvetica, sans-serif">由上述结果对比可以看出:bx中前两个字节控制颜色,后两个字节控制形状</span></span></strong><span class="fontstyle0" style="color: rgba(0, 0, 0, 1)"><span style="font-family: Arial, Helvetica, sans-serif">(不知道对不对0.0</span></span></span></p>
<h3>(四)实验任务四</h3>
<p><span class="fontstyle0">编写完整汇编源程序,实现向内存</span><span class="fontstyle1">0:200~0:23F</span><span class="fontstyle0">依次传送数据</span><span class="fontstyle1">0~63(3FH)</span><span class="fontstyle0">。</span></p>
<p><span class="fontstyle0">1、必做部分<br>综合使用</span><span class="fontstyle2"></span><span class="fontstyle0">和</span><span class="fontstyle2">loop</span><span class="fontstyle0">,编写汇编源程序<br>灵活使用</span><span class="fontstyle2">debug</span><span class="fontstyle0">的</span><span class="fontstyle2">t</span><span class="fontstyle0">命令、</span><span class="fontstyle2">g</span><span class="fontstyle0">命令、</span><span class="fontstyle2">p</span><span class="fontstyle0">命令调试。在程序退出前,用</span><span class="fontstyle2">d</span><span class="fontstyle0">命令查看<span class="fontstyle2">0:200~0:23F</span><span class="fontstyle0">,确认是否将</span><span class="fontstyle2">0~3F</span><span class="fontstyle0">传送至此段内存区域。</span><br></span></p>
<p><span class="fontstyle0"><span class="fontstyle0">代码如下所示:</span></span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">assume cs:code
code segment
mov ax, 20h
mov ds, ax
mov bx, </span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">
mov cx, 40h
mov al, </span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">
s:mov , al
inc al
inc bx
loop s
mov ax, 4c00h
</span><span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> 21h
code ends
end</span></pre>
</div>
<p>运行结果如下所示:</p>
<p><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201030150001227-531084694.png"></p>
<p><span class="fontstyle2">2、选做部分<br></span><span class="fontstyle0">利用栈的特性,综合使用</span><span class="fontstyle2">loop</span><span class="fontstyle0">,</span><span class="fontstyle2">push</span><span class="fontstyle0">实现(限定仅使用</span><span class="fontstyle2">8086</span><span class="fontstyle0">中已学过指令实现),编写源程序<br>灵活使用</span><span class="fontstyle2">debug</span><span class="fontstyle0">的</span><span class="fontstyle2">t</span><span class="fontstyle0">命令、</span><span class="fontstyle2">g</span><span class="fontstyle0">命令、</span><span class="fontstyle2">p</span><span class="fontstyle0">命令调试。在程序退出前,用</span><span class="fontstyle2">d</span><span class="fontstyle0">命令查看<span class="fontstyle2">0:200~0:23F</span><span class="fontstyle0">,确认是否将</span><span class="fontstyle2">0~3F</span><span class="fontstyle0">传送至此段内存区域。</span> <br></span></p>
<p><span class="fontstyle0">代码如下所示:</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">assume cs:code
code segment
mov ax,0020h
mov ss,ax
mov sp,0040h
mov bx,3f3eh
mov cx,</span><span style="color: rgba(128, 0, 128, 1)">64</span><span style="color: rgba(0, 0, 0, 1)">
s: push bx
sub bh,</span><span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">
sub bl,</span><span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">
loop s
mov ax,4c00h
</span><span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> 21h
code ends
end</span></pre>
</div>
<p>运行结果如下所示:</p>
<p><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201030150354681-1286956283.png"></p>
<h3>(五)实验任务五</h3>
<p>补全后的代码为:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">assume cs:code
code segment
mov ax,cs
mov ds,ax
mov ax,0020h
mov es,ax
movbx,</span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">
movcx,0015h
s:mov al,
mov es:,al
inc bx
loop s
mov ax,4c00h
</span><span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> 21h
code ends
end</span></pre>
</div>
<p>运行结果如下所示:</p>
<p><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201030201455231-1386450324.png"></p>
<p>在这里,第一个空中:cs:ip表示cpu执行指令的地址。所有,只要mov ax,cs 就能把该程序在内存里的首地址mov到ax了。</p>
<p>第二个空:cx的值,也就是要求loop循环执行多少次。当程序运行到第8行,也就是mov cx,__ 时,cs:ip是该指令的地址。也就是说,从程序开始IP=0,到第8行,IP的值可以用来表示该程序指令占多少字节。</p>
<h3>(六)实验任务六</h3>
<p>实验过程中一直出现</p>
<div class="cnblogs_code">
<pre>error: parser: instruction expected</pre>
</div>
<p><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201030213629097-822056022.png"></p>
<p>在互联网上查了好多资料也不知道怎么解决,先放着等有时间再来看看</p>
<h2>三、实验总结</h2>
<p>等搞定了任务六再来一起写</p>
<p> </p><br><br>
来源:https://www.cnblogs.com/amikeco/p/13902207.html
頁:
[1]