白糖 發表於 2022-3-29 23:42:00

汇编语言与DOSBOX使用

<h2 align="left">编译并进入debug模式</h2>
<p align="left">masm是微软出的汇编编译器,支持8088/8086架构的汇编语言,在DOS下运行,需要下载。masm包括:</p>
<p align="left">(1)编辑程序edit.exe</p>
<p align="left">(2)汇编程序masm.exe</p>
<p align="left">(3)连接程序link.exe</p>
<p align="left">(3)调试程序debug.exe</p>
<p align="left">基本使用方法如下,仅供参考:</p>
<p align="left">用之前最好把上面的几个文件保存到盘符下的文件夹里,文件夹名字尽量简单明了,一切为了操作简单。</p>
<p align="left">(1)最好不要用edit.exe,而用记事本编辑汇编程序,这样操作比较方便。保存时,文件类型选为所有文件,再在文件名后面加上.asm,保存即可。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;1.下载dosbox并安装</p>
<p>&nbsp; &nbsp;2.举个例子,在D盘新建一个文件夹dosbox,用于存放exe可执行文件<br>
 3、安装DOSBox,完成后双击打开DOSBox<br>
 4、在输入框状态下z:\&gt;<br>
 z:\&gt;mount c d:\<br>
 5、把D盘作为模拟的C文件夹位置<br>
 z:\&gt;c:<br>
 进入c盘</p>
<p>&nbsp;</p>
<p align="left">敲命令进入masm所在文件夹,输入masm *.asm(*表示文件名)回车。 注意:最好*.asm在当前DOS提示符的路径下面,否则会出现找不到*.asm的提示。</p>
<p align="left">这时会提示</p>
<p align="left">Object filename [*.OBJ]:</p>
<p align="left">表示要生成的目标文件名称,必须填,然后回车。提示</p>
<p align="left">Source listing :</p>
<p align="left">表示是否要生成列表文件,填写这生成.lst文件,不填则放弃生成.lst文件。.lst文件用记事本打开能看到源代码的语法错误,查错想当方便,****强烈建议生成****。回车后提示</p>
<p align="left">Cross-reference :</p>
<p align="left">表示生成交叉引用文件.crf,如果有多个.obj文件参与连接就要生成,回车后显示错误数量等信息,编译完成。</p>
<p align="left">(3)输入link *(.obj文件名)</p>
<p align="left">一路回车,返回时已经生成了*.exe。</p>
<p>(4)debug使用比较复杂,将专门介绍。</p>
<p><br>
 6、在输入框状态下c:\&gt;<br>
 c:\&gt;cd dosbox 进入dosbox文件夹。在输入框状态下输入debug *.exe进入debug模式。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>debug:</h2>
<p>-g 直接运行程序</p>
<p>-t 执行一句</p>
<p>-d x y, 输出偏移地址为x到y(闭区间)存储的值,都是8个bit的字节</p>
<p>-q 推出debug模式</p>
<p>&nbsp;</p>
<p>不错的总结:</p>
<p>https://blog.csdn.net/weixin_43916755/article/details/120297723</p>
<p>&nbsp;</p>
<h2>汇编</h2>
<p>汇编除法:</p>
<p>https://blog.csdn.net/xiongyangg/article/details/50610607</p>
<p>对于除数是8位,则被除数是16位存在AX中,除完后,商在AL,余数在AH</p>
<p>对于除数是16位,则被除数是32位存在DX(高位)AX(低位)中,除完后,商在AX,余数在DX</p>
<p>&nbsp;</p>
<p>把寄存器DL中的数字输出。(可能为1位或者2位数)</p>
<p>https://zhuanlan.zhihu.com/p/50139518</p>
<p>子程序:(1位或者两位十进制数)</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">PRINT PROC NEAR
</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, 0, 255, 1)">XOR</span><span style="color: rgba(0, 0, 0, 1)"> AH,AH
</span><span style="color: rgba(0, 0, 255, 1)">MOV</span><span style="color: rgba(0, 0, 0, 1)"> AL,DL
</span><span style="color: rgba(0, 0, 255, 1)">MOV</span> DH,<span style="color: rgba(128, 0, 128, 1)">10</span>
<span style="color: rgba(0, 0, 255, 1)">DIV</span><span style="color: rgba(0, 0, 0, 1)"> DH
</span><span style="color: rgba(0, 0, 255, 1)">CMP</span> AL,<span style="color: rgba(128, 0, 128, 1)">0</span>
<span style="color: rgba(0, 0, 255, 1)">JZ</span><span style="color: rgba(0, 0, 0, 1)"> ONE
</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, 0, 255, 1)">MOV</span><span style="color: rgba(0, 0, 0, 1)"> DL,AL
</span><span style="color: rgba(0, 0, 255, 1)">ADD</span> DL,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">0</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(0, 0, 255, 1)">MOV</span><span style="color: rgba(0, 0, 0, 1)"> AH,02H
</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, 0, 255, 1)">POP</span><span style="color: rgba(0, 0, 0, 1)"> AX
</span><span style="color: rgba(0, 128, 128, 1)">ONE:</span>
<span style="color: rgba(0, 0, 255, 1)">MOV</span><span style="color: rgba(0, 0, 0, 1)"> DL,AH
</span><span style="color: rgba(0, 0, 255, 1)">ADD</span> DL,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">0</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(0, 0, 255, 1)">MOV</span><span style="color: rgba(0, 0, 0, 1)"> AH,02H
</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, 0, 255, 1)">POP</span><span style="color: rgba(0, 0, 0, 1)"> DX

</span><span style="color: rgba(0, 0, 255, 1)">RET</span><span style="color: rgba(0, 0, 0, 1)">
PRINT ENDP</span></pre>
</div>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/Miracevin/p/16074500.html
頁: [1]
查看完整版本: 汇编语言与DOSBOX使用