汤月良 發表於 2020-5-27 15:19:00

【笔记】汇编语言

<p>&nbsp;</p>
<p><strong>*现在王爽老师的《汇编语言》已经看到4.5了,想把接下来看书过程中遇到的所学所想记下来。</strong></p>
<p>&nbsp;</p>
<h3>和masm奋战了一下午</h3>
<p>正在安装masm,感觉这个工具的安装界面就很有年代感(忘记截图了),而且安装真的很慢。</p>
<p>这本书太老了,我翻看了一下是2003年出的,导致书中说的masm 5.0都变成了masm 11……</p>
<p>安装完毕后发现根本找不到一个叫masm.exe的程序,不知道masm32这个文件夹中哪一个才是编译器……</p>
<p>查了很多资料发现一个叫qeditor的程序,应该是这个版本11把编译器做成了eclipse那种图形界面。</p>
<p>结果在link的时候就出现了问题:</p>
<p><img src="https://img2020.cnblogs.com/blog/2018379/202005/2018379-20200527150138448-659213070.png" alt=""></p>
<p>我怀疑是这样的:</p>
<p>因为我的系统是64位的,按理来说应该在Dosbox中编译才能成功,但这个图形界面的编译器又不能在Dos方式下打开,导致只能在本机64位的环境下编译,就无法成功(?)</p>
<p>又找资料找啊找,找到了这篇文章:DOSBox0.74以及汇编编译器的安装使用(虚拟)64位</p>
<p>其实是使用了文章中给的资源(主要是masm和link),之后在cmd中就可以实现4.4和4.5中写道的编译连接了。</p>
<p>需要注意的是因为我们用的是8086的汇编语言,编译形成的exe也是16位的,并不能在64位系统上直接执行:</p>
<p><img src="https://img2020.cnblogs.com/blog/2018379/202005/2018379-20200527151338297-1112822576.png" alt=""></p>
<p>试了一下在Dos中运行,没有反应……当然没有反应,因为asm文件中的内容是这样的:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> assume <span style="color: rgba(0, 128, 128, 1)">cs:</span><span style="color: rgba(0, 0, 0, 1)">codesg
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span>
<span style="color: rgba(0, 128, 128, 1)"> 3</span> <span style="color: rgba(0, 0, 0, 1)">codesg segment
</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, 255, 1)">mov</span><span style="color: rgba(0, 0, 0, 1)"> ax,123h
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span>   <span style="color: rgba(0, 0, 255, 1)">mov</span><span style="color: rgba(0, 0, 0, 1)"> bx,456h
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span>   <span style="color: rgba(0, 0, 255, 1)">add</span><span style="color: rgba(0, 0, 0, 1)"> ax,bx
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span>   <span style="color: rgba(0, 0, 255, 1)">add</span><span style="color: rgba(0, 0, 0, 1)"> ax,ax
</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, 255, 1)">mov</span><span style="color: rgba(0, 0, 0, 1)"> ax,4c00h
</span><span style="color: rgba(0, 128, 128, 1)">11</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)">12</span>
<span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(0, 0, 0, 1)">codesg ends
</span><span style="color: rgba(0, 128, 128, 1)">14</span>
<span style="color: rgba(0, 128, 128, 1)">15</span> end</pre>
</div>
<p>只是做了一些寄存器的处理,并没有什么要显示出来的(真可恶我看了4.7才反应过来这一点,之前先入为主地以为在Dos中也无法运行……)</p>
<p>看到说“存有机器码的目标文件”想起来把obj文件放到010editor看看是什么情况:</p>
<p>&nbsp;<img src="https://img2020.cnblogs.com/blog/2018379/202005/2018379-20200527155407502-218434044.png" alt=""></p>
<p>obj文件内容要比原本的asm文件少,标注出的部分是汇编指令的机器码。再对比一下exe:</p>
<p><img src="https://img2020.cnblogs.com/blog/2018379/202005/2018379-20200527155743358-1965012555.png" alt=""></p>
<p>中间全是零,代码段在最后。</p><br><br>
来源:https://www.cnblogs.com/ctf-love/p/12973291.html
頁: [1]
查看完整版本: 【笔记】汇编语言