汇编语言(Assembly)
<h2>机器语言</h2><p>机器语言是机器指令的集合,机器指令是一列二进制数字,计算机把机器指令转换成高低电平来驱动硬件进行计算运行。</p>
<p>每一种CPU的硬件设计、内部结构不同,需要不同的高低电平来控制,所以每种CPU都有自己的机器指令集,也就是机器语言。</p>
<h2>汇编语言</h2>
<p class="md-end-block md-p"><span class="md-plain">汇编语言是一种底层编程语言,它基于CPU指令集,使用助记符号和符号标签来表示机器语言的指令操作。相对于高级语言,汇编语言更加贴近计算机底层的操作,能够直接操控CPU、内存、IO等硬件资源,具有高性能和灵活性的特点。</span></p>
<p class="md-end-block md-p"><span class="md-plain">在汇编语言中,每条指令都对应着一条机器指令,这些指令可以直接操作CPU寄存器和内存单元,实现数据的计算、移动、比较、跳转等操作。同时,汇编语言还提供了宏指令和过程调用等高级特性,使得代码的可读性和可维护性得到一定程度的提高。</span></p>
<p class="md-end-block md-p md-focus"><span class="md-plain md-expand">汇编语言是编写操作系统、驱动程序、编译器和反汇编等底层软件的重要语言,在数字信号处理、通信、嵌入式系统等领域也有广泛应用。尽管汇编语言的代码通常比较冗长,但在一些要求高性能和精细控制的场合下,还是能够发挥出其独特的价值。</span></p>
<hr>
<p class="md-end-block md-p md-focus"> </p>
<p>机器语言缺点:不方便记忆、辨别、生产效率低,于是有了汇编语言</p>
<p>汇编语言的主体是汇编指令,只是和机器语言的表示方式不一样,更方便记忆、编程。</p>
<p>汇编指令就是机器码的助记符,每个助记符都有对应的机器码,汇编代码通过编译器编译成二进制可执行文件运行。</p>
<h2>Hello World</h2>
<h3>Go</h3>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">package</span><span style="color: rgba(0, 0, 0, 1)"> main
</span><span style="color: rgba(0, 0, 255, 1)">import</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">fmt</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(0, 0, 255, 1)">func</span><span style="color: rgba(0, 0, 0, 1)"> main() {
fmt.Println(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Hello, World!</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
}</span></pre>
</div>
<h3>汇编</h3>
<p>用x86汇编语言(Intel语法)编写的一个简单的Hello World程序:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">section .data
hello db </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Hello, World!</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">
section .text
global _start
</span><span style="color: rgba(0, 128, 128, 1)">_start:</span>
<span style="color: rgba(0, 128, 0, 1)">;</span><span style="color: rgba(0, 128, 0, 1)"> 将字符串地址存储到寄存器 ebx 中</span>
<span style="color: rgba(0, 0, 255, 1)">mov</span><span style="color: rgba(0, 0, 0, 1)"> ebx, hello
</span><span style="color: rgba(0, 128, 0, 1)">;</span><span style="color: rgba(0, 128, 0, 1)"> 调用系统调用,输出字符串</span>
<span style="color: rgba(0, 0, 255, 1)">mov</span> eax, <span style="color: rgba(128, 0, 128, 1)">4</span> <span style="color: rgba(0, 128, 0, 1)">;</span><span style="color: rgba(0, 128, 0, 1)"> 系统调用号 4 表示 write</span>
<span style="color: rgba(0, 0, 255, 1)">mov</span> ecx, ebx <span style="color: rgba(0, 128, 0, 1)">;</span><span style="color: rgba(0, 128, 0, 1)"> 字符串地址</span>
<span style="color: rgba(0, 0, 255, 1)">mov</span> edx, <span style="color: rgba(128, 0, 128, 1)">13</span> <span style="color: rgba(0, 128, 0, 1)">;</span><span style="color: rgba(0, 128, 0, 1)"> 字符串长度</span>
<span style="color: rgba(0, 0, 255, 1)">int</span> 0x80 <span style="color: rgba(0, 128, 0, 1)">;</span><span style="color: rgba(0, 128, 0, 1)"> 调用系统调用</span>
<span style="color: rgba(0, 128, 0, 1)">;</span><span style="color: rgba(0, 128, 0, 1)"> 退出程序</span>
<span style="color: rgba(0, 0, 255, 1)">mov</span> eax, <span style="color: rgba(128, 0, 128, 1)">1</span> <span style="color: rgba(0, 128, 0, 1)">;</span><span style="color: rgba(0, 128, 0, 1)"> 系统调用号 1 表示 exit</span>
<span style="color: rgba(0, 0, 255, 1)">xor</span> ebx, ebx <span style="color: rgba(0, 128, 0, 1)">;</span><span style="color: rgba(0, 128, 0, 1)"> 返回值 0</span>
<span style="color: rgba(0, 0, 255, 1)">int</span> 0x80 <span style="color: rgba(0, 128, 0, 1)">;</span><span style="color: rgba(0, 128, 0, 1)"> 调用系统调用</span></pre>
</div>
<p> </p>
<p> </p>
<p> </p>
<p class="md-end-block md-p"> </p>
<p> </p><br><br>
来源:https://www.cnblogs.com/ferris/p/10927513.html
頁:
[1]