如此岑寂 發表於 2022-6-16 22:15:00

汇编语言 学习记录 - 01 - 基础概念

<h2 id="汇编语言">汇编语言</h2>
<p>要使用计算机,就得用计算机“能够理解”的语言,即计算机语言。一台机器只认识本种机型的机器语言——指令系统,对于其余语言的程序,首先由编译器或解释器完成高级语言到机器语言的翻译工作,再由硬件系统来执行翻译后的程序。若要充分发挥机器硬件资源的作用,提高程序代码的效率,就必须直接使用机器的低级语言。绝大多数的汇编语言程序都是对各种高级高级语言的补充,即增加了许多被编译程序原作者遗漏了的功能。</p>
<h3 id="基本汇编语言程序">基本汇编语言程序</h3>
<p>汇编语言(Assembly Language/Assembler Language)是一种面向机器的程序设计语言,它是机器语言的符号化描述,而高级语言是面向问题的,甚至于面向对象。汇编语言因不同类型的机器而有不同的语法规则。汇编语言的一个执行语句,对应一条机器语言指令,反之亦然。用汇编语言书写的程序,称为汇编语言源程序或汇编语言程序。汇编语言源程序也和其它高级语言的源程序一样,必须由翻译程序翻译成代码程序(即机器语言的程序),方才能在机器中执行,此代码程序称为相应源程序的目标程序。<br>
汇编程序(Assembler)是把源程序转变为相应目标程序的翻译程序,这个转变过程称为汇编。汇编程序的翻译过程(汇编)相当于直译,其语言和机器语言有着一一对应的关系;而高级语言的翻译过程(编译)相当于一个意译过程,没有直接对应的关系。</p>
<p>不同的微处理器对应不同的汇编语言,所谓基于某种机型的汇编语言,实际上是指基于某种机型的汇编程序,按照汇编程序能够理解的程序格式来书写程序,才能被该汇编程序汇编成该种机型对应的机器代码,然后才能在该种机器上运行。在诸多汇编程序中,最为流行的是Microsoft公司所开发的宏汇编程序(MacroAssembler,MASM),它是基于Intel系列机的,它不仅包含一般汇编语言的功能,而且采用了高级语言使用的数据结构,是一种接近高级语言的汇编语言。</p>
<h2 id="机器语言与机器指令">机器语言与机器指令</h2>
<p>机器语言是机器指令的集合。<br>
机器指令是一台机器可以正确执行的命令。<br>
机器指令由一串二进制数表示,计算机将之转变为一列高低电平,以使计算机的电子器件受到驱动,进行运算。<br>
例: <code>01010000</code> 其电平脉冲为:<br>
<img src="https://img2022.cnblogs.com/blog/2884569/202206/2884569-20220616213115288-374836589.png" alt="" loading="lazy"></p>
<p>现代计算机是指由CPU(Central Processing Unit,中央处理单元)和其它受CPU直接或间接控制的芯片、器件、设备组成的计算机系统。CPU是一种微处理器。每一种微处理器,由于硬件设计和内部结构的不同,就需要用不同的电平脉冲来控制,使它工作。所以每一种微处理器都有自己的机器指令集,也就是机器语言。</p>
<h2 id="汇编语言与汇编指令">汇编语言与汇编指令</h2>
<p>汇编语言的主体是汇编指令。<br>
汇编指令和机器指令的差别在于指令的表示方法上:</p>
<ul>
<li>汇编指令是机器指令便于记忆的书写格式</li>
<li>汇编指令是机器指令的助记符</li>
</ul>
<pre><code>机器指令:1000100111011000
操作:将寄存器BX的内容送到AX中
汇编指令:MOV AX, BX
</code></pre>
<p>汇编语言的组成:</p>
<ol>
<li>汇编指令:机器码的助记符,有对应的机器码;</li>
<li>伪指令:没有对应的机器码,由编译器执行,计算机并不执行;</li>
<li>其它符号:如+ - * /等,由编译器识别,没有对应的机器码。</li>
</ol>
<blockquote>
<p>汇编语言的核心是汇编指令,它决定了汇编语言的特性</p>
</blockquote>
<p><img src="https://img2022.cnblogs.com/blog/2884569/202206/2884569-20220616214323404-2024198275.png" alt="" loading="lazy"></p>
<h2 id="计算机主板组成">计算机主板组成</h2>
<p>主板上有:</p>
<ul>
<li>CPU</li>
<li>总线</li>
<li>内存(条)</li>
<li>扩展槽(接外部设备)</li>
</ul>
<p><img src="https://img2022.cnblogs.com/blog/2884569/202206/2884569-20220616214747515-1561182349.png" alt="" loading="lazy"><br>
CPU 是计算机的核心部件,它控制整个计算机的运作并进行运算。要想让一个CPU工作,就必须向它提供指令和数据。指令和数据在存储器(内存)中存放,离开了内存,再好的CPU也无法工作。</p>
<h3 id="指令和数据">指令和数据</h3>
<p>计算机中的数据和指令,存储在内存或磁盘上,都是二进制信息。<br>
像比如二进制信息<code>1000100111011000</code>,它可以是数据,还可以是指令,由CPU决定(根据表示形式)。</p>
<pre><code>1000100111011000 ─&gt; 89D8H (数据)
1000100111011000 ─&gt; MOV AX,BX (指令)
</code></pre>
<p>数据如何表示?</p>
<ul>
<li>1000100111011000B (二进制)</li>
<li>89D8H (十六进制)</li>
<li>104730O(八进制)</li>
<li>35288D(十进制)</li>
</ul>
<h3 id="存储器">存储器</h3>
<p>存储器被划分为若干个存储单元,每个存储单元从0开始顺序编号,每个存储单元可存储1个字节(Byte),即8个二进制位(8bit)。<br>
例如一个存储器有128个存储单元,编号从0~127,可以存储128个Byte;</p>
<p><img src="https://img2022.cnblogs.com/blog/2884569/202206/2884569-20220616215247371-1992114042.png" alt="" loading="lazy"></p>
<p>数据量:<br>
8bit = 1B(Byte)<br>
1024B = 1KB<br>
1024KB = 1MB<br>
1024MB = 1GB<br>
1024GB = 1TB</p>
<h4 id="cpu对存储器的读写">CPU对存储器的读写</h4>
<p>CPU要从内存中读写数据,首先要指定存储单元的地址(要先确定它要操作哪一个存储单元上的数据),并且,还需指明要对哪一个器件进行操作(一台微机中,不止存储器这一种器件),进行哪种操作,或读或写。<br>
即CPU要进行数据读写,必须和外部器件(芯片)进行以下信息的交互:存储单元的地址(地址信息);器件的选择,读或写的命令(控制信息);读或写的数据(数据信息)。</p>
<h3 id="总线">总线</h3>
<p>电子计算机能处理、传输的信息都是电信号,电信号用导线来进行传送。<br>
在计算机中专门有连接CPU和其他芯片的导线,通常称为总线。<br>
物理上:一根根导线的集合;<br>
逻辑上:划分为地址总线(单向)、数据总线(双向)、控制总线(双向)。</p>
<p><img src="https://img2022.cnblogs.com/blog/2884569/202206/2884569-20220616215637532-1109945582.png" alt="" loading="lazy"></p>
<p>1)CPU通过地址线将地址信息<code>3号</code>发出;<br>
2)CPU通过控制线发出内存读命令,选中存储器芯片,并通知它,将要从中读取数据;<br>
3)存储器将<code>3号</code>单元中的数据<code>08</code>通过数据线送入CPU。</p>
<blockquote>
<p>要让一个计算机或微处理器工作(进行数据的读写),应向它输入能够驱动其进行工作的电平信息(机器码)。</p>
</blockquote>
<h4 id="地址总线">地址总线</h4>
<p>CPU是通过地址总线来指定存储单元的。地址总线宽度,决定了可寻址的存储单元大小。<br>
N根导线可以传送N位二进制数据(bit),N位二进制数据最多可以表示 2^N 个不同的数据(Byte),也就意味着最多可寻找 2^N 个内存单元。</p>
<blockquote>
<p>N根地址总线(宽度为N),对应寻址空间 2^N Byte。</p>
</blockquote>
<p><img src="https://img2022.cnblogs.com/blog/2884569/202206/2884569-20220616220259470-2102596396.png" alt="" loading="lazy"></p>
<h4 id="数据总线">数据总线</h4>
<p>CPU与内存或其它器件之间的数据传送是通过数据总线来进行的。<br>
数据总线的宽度决定了CPU和外界的数据传送速度。(8根数据总线一次性可传送8位二进制数据,即一个字节;16根就可以一次性传送16位二进制数据,即2个字节)<br>
例:向内存中写入数据 89D8 时的数据传送:<br>
<img src="https://img2022.cnblogs.com/blog/2884569/202206/2884569-20220616220330713-691853138.png" alt="" loading="lazy"></p>
<h4 id="控制总线">控制总线</h4>
<p>CPU通过控制总线对外部器件进行控制。控制总线只是个总称,它是一些不同控制线的集合。<br>
控制总线宽度决定了CPU对外部器件的控制能力(有多少根,就意味着CPU提供了对外部器件的多少种控制)。<br>
<img src="https://img2022.cnblogs.com/blog/2884569/202206/2884569-20220616220653599-110443144.png" alt="" loading="lazy"></p>
<h3 id="内存地址空间">内存地址空间</h3>
<p>内存地址空间:CPU地址总线宽度为N,寻址空间为2NB。<br>
例如:8086CPU的地址总线宽度为20,那么可以寻址1MB个内存单元,其内存地址空间就是为1MB。</p>
<h4 id="从cpu角度看地址空间分配">从CPU角度看地址空间分配</h4>
<p>每一台PC机中,都有一个主板,主板上有CPU、存储器、外围芯片组、扩展插槽(一般插有RAM内存条和各类接口卡)等,它们通过总线相连。CPU对外部设备都不能直接控制,如显示器、音箱等,CPU通过总线向接口卡发送命令,接口卡根据命令控制外设进行工作。</p>
<p>同时,一台PC机,装有多个存储器芯片,从物理连接上看:都是独立的、不同的器件;从读写属性上看,分为随机存储器(Random Access Memory,RAM)和只读存储器(Read Only Memory,ROM)。RAM可读可写,但必须带电存储,关机后存储的内容丢失;ROM只能读不能写入,关机后其中的内容不丢失。</p>
<p>这些存储器又从功能和连接上分:</p>
<ul>
<li>随机存储器<br>
用于存放供CPU使用的绝大部分程序和数据,主随机存储器一般由两个位置上的RAM组成,装在主板上的RAM和插在扩展插槽上的RAM。</li>
<li>装有BIOS(Basic Input/Output System,基本输入/输入系统)的ROM<br>
BIOS是由主板和各类接口卡(如显卡、网卡等)厂商提供的软件系统,可以通过它利用该硬件设备进行最基本的输入输出。在主板和某些接口卡上插有存储相应BIOS的ROM。</li>
<li>接口卡上的RAM<br>
某些接口卡需要对大批量输入、输出数据进行暂时存储,在其上装有RAM。最典型的就是显示卡上的RAM,一般称为显存(将需要显示的内容写入显存,就会输出在显示器上)。</li>
</ul>
<p><img src="https://img2022.cnblogs.com/blog/2884569/202206/2884569-20220616221308397-973418651.png" alt="" loading="lazy"></p>
<p>以上存储器,在物理上都是独立的器件,但是,CPU在操控它们时,都将它们当作内存看待,将之总的看作一个由若干个存储单元组成的逻辑存储器,即内存地址空间。</p>
<p><img src="https://img2022.cnblogs.com/blog/2884569/202206/2884569-20220616221319738-1715048832.png" alt="" loading="lazy"></p>
<p>如有错误,欢迎评论指正🤝</p><br><br>
来源:https://www.cnblogs.com/Zerimon/p/16383785.html
頁: [1]
查看完整版本: 汇编语言 学习记录 - 01 - 基础概念