美文网首页
汇编基础(一)

汇编基础(一)

作者: 领悟12138 | 来源:发表于2017-07-12 19:02 被阅读0次

机器语言:由0和1组成的机器指令

高级语言:更接近人类的语言如 oc,swift,c...

一条汇编指令和一条机器指令是一一对应的

机器指令可以反汇编成汇编指令但是不可能从汇编指令反编译成高级语言

不同的平台生成的汇编指令不同

汇编语言的特点:

可以直接访问,控制各种硬件设备,比如存储器,CPU等能最大限度发挥硬件的功能

不受编译器的限制,对生成的二进制代码进行完全控制

目标代码剪短,占用的内存少,执行速度快(相对于高级语言)

注:高级语言一条指令是有好多天汇编指令组成所以速度相对来说会慢

每一种型号的cpu都有自己的机器指令\汇编指令集,所以汇编指令不具备可移植性

知识点过多,不易于编写,调试和维护

不区分大小写

app的执行过程

CPU没办直接去硬盘读文件只能去内存取

单位换算

每8个二进制位就是一个字节,而内存中最小单元是一个字节,一个字节的单位是Byte, 一个二进制单位是bit

1B = 8bit 一个二进制位对应一个0或者1

内存中 2个16进制位表示一个字节

1M 是数量单位

1Mb 是容量单位表示内存大小

总线

地址总线

地址总线是由一根根的导线组成,它有多少根我们称之为宽度,比如有10根宽度就是10.

地址总线宽度决定内存需求的大小。16位的有16根内存需求1Mb 32位的有32根内存需求是4G

宽度决定了CPU的寻址能力

宽度决定了地址总线的寻址能力。

地址总线的宽度和寻址能力关系:(个人理解)———以8086的CPU举例。它的宽度是20。每根地址总线对应一个高频或者低频信号,即只能传0或者1.所以他的范围是20个0 ~ 20个1, 转换成16进制是 0x00000 ~ 0xFFFFF(这就是能访问内存地址的范围,内存的最大值是0xFFFFF 即 0x00000,0x00001, 0x00002 … 0xFFFFF 这中间共1024*1024个,一个地址对应一个内存单元)转换成十进制是 0 ~ 1024*1024  即20根地址总线能访问的内存单位的个数范围是0 ~ 1024*1204 。所以数量是1024*1024 = 1M(数量单位-内存单位的个数)而每个内存单位对应8个二进制单位即一个字节(B),内存单位的上限是1024*1024个(M)所以对应的内存的容量是(1024*1024)B = 1Mb。寻址能力是1Mb

地址总线最大40根目前 - 输出的是地址的值

xp32位的系统地址总线是32根

数据总线

所说的32位64位的系统是指数据总线的宽度

宽度决定cpu单次数据的传输量直接影响cpu执行效率和性能 - (吞吐量)

传输的是数据,每根只能传1\0 (单位是bit)所以8根数据总线传输1B即1个字节。一个数据总线对应一个bit位 8个bit位是一个字节(Byte)

数据总线传的不是数据而是内存地址

数据总线传递的是数据地址而不会传二进制数据为了性能

控制总线 -- 传输各种命令

内存里的数据默认的都是用16进制表示

内存地址都是从低到高 我们能用的是低地址区高地址区是给系统用的 - 内存安全的地址是低地址

内存地址的空间大小受CPU地址总线宽度的限制

CPU的硬件结构

CPU内部链接的情况寄存器 运算器 控制器

寄存器

8086有14个寄存器,都是16位的寄存器,可以存放2个字节

通过改变寄存器的内容来改变cpu的操作

不同的CPU个数结构名称都是不同的  相同的是有一个寄存器改变cup的行为

AX寄存器分高八位和低八位  H:高位寄存器 L:低位寄存器

所有的内存单元都有唯一的地址,叫做物理地址。内存中最小的单元。

寻址方式

段地址 * 16 + 偏移地址

写法举例: 233DFH -> 2330H :00DFH (*16省略,系统自动执行了)

2300H :03DFH

.

.

.

地址加法器

CPU中的一个部件

作用:以8086为例,将两个16进制位放到地址加法器中,合成一个用二十位地址总线能输出的地址

内存分段管理

从上到下内存越来越大

因为寻址方式四段地址+偏移地址 所以 可以把内存分成一个个的段。首先由段地址找到是哪个段然后由偏移地址找到对应的具体地址。类似于c中数组

8086段寄存器

8086在访问内存时要由相关部件提供内存单元的段地址和偏移地址,送入地址加法器合成物理地址

什么是部件提供段地址?

段地址在8086的段寄存器中存放

8086有4个段寄存器:CS、DS、SS、ES,当CPU需要访问内存时由这4个段寄存器提供内存单元的段地址

CS (Code Segment):代码段寄存器

DS (Data Segment):数据段寄存器

SS (Stack Segment):堆栈段寄存器

ES (Extra Segment):附加段寄存器

相关文章

  • ARM64汇编入门 - 汇编基础

    ARM64汇编入门 - 汇编基础ARM64汇编入门 - 汇编基础

  • <安全攻防之汇编基础>

    &关于汇编基础请点击 <汇编一> <汇编二> <汇编三> <汇编四> <汇编五> <汇编六> <汇编七> <汇编八...

  • iOS汇编

    iOS逆向之旅(基础篇) — 汇编(一)— 汇编基础[https://www.jianshu.com/p/19a2...

  • 第二章 汇编基础

    第二章汇编基础 汇编部分讲解了汇编基础知识,为了帮助大家理解,书中使用了大量的图文和例题。 汇编是通往编程的大门,...

  • 汇编基础(一)

    语言的发展 机器语言: 由0和1组成的机器指令. 如:0101 0001 1101 0110汇编语言(assemb...

  • 汇编基础(一)

    机器语言:由0和1组成的机器指令 高级语言:更接近人类的语言如 oc,swift,c... 一条汇编指令和一条机器...

  • 一、汇编基础

    寄存器 内部部件之间由总线连接 CPU除了有控制器、运算器还有寄存器。其中寄存器的作用就是进行数据的临时存储。 C...

  • 从 简单汇编基础 到 Swift 不简单的 a + 1

    从 简单汇编基础 到 Swift 不简单的 a + 1从 简单汇编基础 到 Swift 不简单的 a + 1

  • c语言逆向分析之函数1

    从汇编的角度去理解函数会让你更加的深刻。。。。。。 看这篇文章需要一定的c语言基础和汇编基础(能基本看懂简单的汇编...

  • IOS 逆向开发(二十一) 汇编-基础

    @[TOC](IOS 逆向开发(二十一) 汇编-基础) 1. 汇编简介 为啥要需要学习汇编? 大学都学习过汇编语言...

网友评论

      本文标题:汇编基础(一)

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