豆豆强 發表於 2019-8-28 11:28:00

汇编语言初探

<h1 id="汇编语言初探">汇编语言初探</h1>
<h2 id="0x00-参考">0x00 参考</h2>
<ul>
<li>
<p>阮一峰的网络日志之汇编语言入门教程</p>
</li>
<li>
<p>ARM汇编语言学习笔记(一)---ARM汇编的程序结构</p>
</li>
</ul>
<h2 id="0x01-要点概述">0x01 要点概述</h2>
<ul>
<li>
<p>标准化以后,称为 assembly language,缩写为 asm,中文译为汇编语言。</p>
</li>
<li>
<p>汇编语言是二进制指令的文本形式,与指令是一一对应的关系。</p>
</li>
<li>
<p>每一种 CPU 的机器指令都是不一样的,因此对应的汇编语言也不一样。</p>
<p>早期的 x86 CPU 的8个寄存器名称<br>
EAX EBX ECX EDX EDI ESI EBP ESP<br>
ESP 寄存器有特定用途,保存当前 Stack 的地址</p>
</li>
<li>
<p>gcc 将程序转成汇编语言:gcc -S example.c</p>
</li>
<li>
<p>一般来说,调用栈有多少层(即函数有多少个),就有多少帧。</p>
</li>
<li>
<p>一句汇编语言有一个CPU指令和零到多个运算子组成</p>
</li>
</ul>
<h2 id="0x02-x86-cpu-汇编指令">0x02 x86 CPU 汇编指令</h2>
<h3 id="push-指令"><code>push</code> 指令</h3>
<p>用于将运算子放入Stack。<br>
该指令有一个前置操作:它会先取出 ESP 寄存器里面的地址,将其减去几个字节,然后将新地址写入 ESP 寄存器。</p>
<h3 id="pop-指令"><code>pop</code> 指令</h3>
<p>用于取出 Stack 最近一个写入的值(即最低位地址的值),并将这个值写入运算子指定的位置。<br>
该指令还会将 ESP 寄存器里面的地址加4,即回收4个字节。</p>
<h3 id="mov-指令"><code>mov</code> 指令</h3>
<p>用于将一个值写入某个寄存器。</p>
<h3 id="add-指令"><code>add</code> 指令</h3>
<p>用于将两个运算子相加,并将结果写入第一个运算子。</p>
<h3 id="call-指令"><code>call</code> 指令</h3>
<p>用来调用函数。</p>
<h3 id="ret-指令"><code>ret</code> 指令</h3>
<p>用于终止当前函数的执行,将运行权交还给上层函数。也就是,当前函数的帧将被回收。</p>
<h2 id="0x03-arm-cpu-汇编指令">0x03 ARM CPU 汇编指令</h2>
<h3 id="单行注释用--表示多行注释用--">单行注释用 <code>@</code> 表示,多行注释用 <code>/* */</code></h3>
<h3 id="所有以点开头的都是汇编器指令就是给汇编器读的指令不属于arm指令集">所有以点开头的都是汇编器指令,就是给汇编器读的指令,不属于ARM指令集</h3>
<ul>
<li>
<p>.flie:指定了源文件名。手写可忽略</p>
</li>
<li>
<p>.align:指定了代码对齐方式你后面跟的是2的次方</p>
</li>
<li>
<p>.ascii:声明字符串</p>
</li>
<li>
<p>.global:声明全局符号。全局符号是指在本程序外可访问的符号</p>
</li>
<li>
<p>.type:指定符号的类型,“.type main,%function”表示main为函数</p>
</li>
<li>
<p>.word: 用来存放地址</p>
</li>
<li>
<p>.size:设定指定符号的大小。“.size main,.-main”中的”.”表示当前地址,减去main符号的地址为整个main函数的大小</p>
</li>
<li>
<p>.ident:编译器标识,无实际意义</p>
</li>
</ul>
<h3 id="str指令">STR指令</h3>
<p>用于从源寄存器中将一个32位的字数据传送到存储器中。<br>
该指令在程序设计中比较常用,寻址方式灵活多样,使用方式可参考指令LDR。</p>
<ul>
<li>
<p>STR R0, , #8      : 将R0中的字数据写入以R1为地址的存储器中,并将新地址R1+8写入R1。</p>
</li>
<li>
<p>STR R0,       ; 将R0中的字数据写入以R1+8为地址的存储器中。</p>
</li>
</ul><br><br>
来源:https://www.cnblogs.com/guduyl/p/11423011.html
頁: [1]
查看完整版本: 汇编语言初探