美文网首页
汇编笔记

汇编笔记

作者: 燃烧吧hjc | 来源:发表于2017-07-20 10:56 被阅读0次

## 前言

最近在看一些关于linux startup的东西,对于其中使用到的AT&T的汇编语法有点陌生,所以写下这篇文章来帮助自己和更多的人了解一些常见的AT&T汇编的语法。

因为之前看过一段时间的汇编语法,所以并不会对其中的语法有过多的深入(主要是自己学的还不够好,大大的羞愧),仅针对自己感兴趣的方面,如果有同学对其中的部分感兴趣或者想给予扩充,非常欢迎!(你问我支不支持,我是支持滴!)

## 学习环境

因为自己平时主要是使用Mac进行编程,所以文章中如果出现部分示例,仅仅确保在Mac的环境中能够正常运行(周知~)。如果有热心的同学能够对不同的环境下的运行结果进行反馈,也是欢迎的(我是认真的~)。

## 汇编常用的语法

### section directive

1. data section

用来声明程序中用来存储数据的内存区域;这个区域在声明之后不能被扩充,在程序中全局为static。

2. bss section

bss也是静态内存区域,包含在程序中定义的数据缓冲,这段内存区域的独特之处是使用了0进行填充。

3. text section

这段内存区域用来存储指令代码,这段区域是固定的。

### register

1. EAX

累加器,用来进行加法运算,存储结果。

2. EBX

指向数据内存区域中的数据指针。

3. ECX

string和循环操作的计数器。

4. EDX

I/O指针。

5. EDI

指向string操作目的地址的数据指针。

6. ESI

指向string操作源地址的数据指针。

7. ESP

栈指针。

8. EBP

栈数据指针。

### segment registers

1. CS

代码段,CS寄存器中包含了指向内存中代码段的指针,代码段是内存中指令代码存储的地方。处理器基于CS寄存器的值从内存中获取指令代码,而相关的偏移量则存储在EIP指令指针寄存器当中。

2. DS

数据段,DS、ES、FS、GS均指向数据段。使用这4种不同的数据段,可以帮助程序分离不同的数据对象,使得他们直接没有交集。

3. SS

堆栈段,SS寄存器当中包含了指向内存中堆栈段的指针。栈中包含了程序中传递给函数的数据。

4. ES

5. FS

6. GS

### instruction pointer register

Instruction pointer register(EIP, 指令指针寄存器)有时也被称之为程序计数器,指向下一个要被执行的指令代码。通常情况下,不能直接去修改EIP中的值,可以通过jump等指令的方式间接的修改EIP中的值,并将下一个指令代码进行cache。

### control register

Control register在x86系列中包含CR0-7,在x86_64中则额外增加了EFER、CR8这两个控制寄存器。通过控制寄存器,可以决定处理器的操作模式、当前执行任务的特性等。

在通常情况下,不能够直接获取到控制寄存器的数值。需要将控制寄存器的数值转到通用寄存器当中,才能获取到;如果希望对控制寄存器进行赋值,则需要将数值转移到通用寄存器当中,然后将通用寄存器的值赋给控制寄存器。

### flags

通过flag来表明一个程序是否被正确执行了。

按照功能,flag被分为以下几种:

1. Status flags

被用来标识算数操作的结果。

|flag      |bit        |name            |describe|

| -------------|:--------------:|:--------------:|:--------------:|

|CF|0|Carry flag|在算术运算中,数字溢出时使用|

|PF|2|Parity flag|奇偶校验符|

|AF|4|Adjust flag|类似于十进制加减法,在进位或者借位的时候使用|

|ZF|6|Zero flag|当一个操作的结果为0时,此标识位置为1|

|SF|7|Sign flag||

2. Control flags

3. System flags

## 未完待续~~

相关文章

  • ARM64汇编学习笔记一(初始汇编)

    ARM64汇编学习笔记一(初始汇编)

  • iOS OC反汇编

    OC的反汇编 笔记暂时提交, 日后修正 1. OC方法本质 objc_msgSend(id , sel), 汇编打...

  • 汇编语言 学习笔记(三)

    汇编语言学习笔记 四、汇编语言程序格式 语句基本格式 汇编语言程序中的语句由 4 项组成,格式如下: 名字(nam...

  • 汇编入门(长文多图,流量慎入!!!)

    8086汇编 本笔记是笔者观看小甲鱼老师(鱼C论坛)《零基础入门学习汇编语言》系列视频的笔记,在此感谢他和像他一样...

  • 汇编语言之基础

    本系列为学习<汇编语言> 王爽版 的学习笔记 [TOC] 汇编语言是什么? 汇编语言是直接在硬件之上工作的编程语言...

  • 汇编笔记

    进制 进制的本质不是运算,而是对应规则,俗称查表。无论什么进制,都有自己的一套方法,然后,只要做出加法表,乘法表,...

  • 汇编笔记

    ## 前言 最近在看一些关于linux startup的东西,对于其中使用到的AT&T的汇编语法有点陌生,所以写下...

  • 汇编笔记

    cpu和存储器芯片通过总线交互,总线从逻辑上分为三类:地址总线,控制总线和数据总线,比如cpu从内存中读取数据:地...

  • 【笔记】《Linux C编程一站式学习》第17章 x86汇编程序

    第17章 x86汇编程序基础 本文是看17章的笔记。方便自己回顾。汇编基础知识可以看王爽的《汇编语言》本文环境我用...

  • 汇编笔记一 : 初始汇编

    汇编语言百度百科词条: 机器语言 由0和1组成的机器指令. 汇编语言(assembly language) 由于机...

网友评论

      本文标题:汇编笔记

      本文链接:https://www.haomeiwen.com/subject/pghiattx.html