汇编基础----计算机结构简介--汇编简介

一.计算机硬件组成结构。

计算机内部硬件组成图:

汇编基础----计算机结构简介--汇编简介

各硬件的结构图:
汇编基础----计算机结构简介--汇编简介
计算机硬件与软件图解:

汇编基础----计算机结构简介--汇编简介

软件系统:

汇编基础----计算机结构简介--汇编简介


*处理器(CPU)

主要组成部分:运算器、控制器、寄存器

(一)、运算器:进行算术逻辑运算。对二进制进行加、减、乘、除基本运算,或、与、非的逻辑运算

    组成:算术逻辑运算ALU、内部总线、通用寄存器组、输入多路开关和数据锁存器、输出移位多路开关。

(二)、控制器:用于计算机硬件系统中,指挥、协调各部件的工作。整个计算机的中枢。用于取指令、分析指令、执行指令、输入/输出控制、中断处理

    组成:指令寄存器、指令计数器、指令译码器、地址形成部件、时序信号发生器、操作控制部件、中断机构。

(三)、寄存器组:是CPU内部的若干个存储单元,寄存器的数目因微处理器而定。用于暂存数据,避免频繁访问内存,缩短指令长度和执行时间。

    分类:专用寄存器(堆栈指针、标志寄存器等作用于固定工作)、通用寄存器(多种用途)。

 

  • 汇编语言的组成

汇编指令:机器码的助记符,有对应的机器码。是汇编语言的核心。

伪指令:没有对应的机器码,由编译器执行,计算机并不执行。

其他符号:如+、-、*、/等,由编译器识别,没有对应的机器码。

  • 存储器

存储器主要存放指令和数据。如内存和磁盘。

计算机执行过成:CPU----内存----磁盘。

注:CPU不能直接访问磁盘,只能通过磁盘放入内存,CPU再从内存中访问。

  • 指令和数据

在内存和磁盘上,指令和数据没有任何区别,都是二进制信息。

例如: 

1000100111011000   --> 89D8H(数据)
1000100111011000   --> mov ax,bx(指令)
  • 存储单元

存储器被划分成若干个存储单元,每个存储单元从0开始顺序编号。计算机中最小单元是bit(比特)

单位换算:

bit(比特)    byte(字节)    word(字)    dword(双字)

8bit = 1Byte     2Byte = 1Word     4Byte = 1dword     1024Byte = 1KB     1024KB = 1MB    1024MB = 1GB     1024GB = 1TB

  • CPU对存储器的读写

CPU读写流程图:

汇编基础----计算机结构简介--汇编简介

CPU对内存的操作:

首先指定存储单元的地址(存储单元从0开始顺序编号,这些编号可以看作存储单元在存储器中的地址),然后进行哪种操作(读/写)。

操作过成:

1.存储单元的地址(地址信息)

2.器件的选择,读或写的命令(控制信息)

3.读或写的数据(数据信息)

CPU通过总线来传送到存储器,分别是地址总线、控制总线、数据总线

总线 含义 方向 特点 寻址
地址总线 CPU通过它来指定存储单元 单向 总线能传送多少不同的信息,CPU就能对多少内存单元进行寻址 2^n  n代表多少根地址总线   一根能传送2种
控制总线 CPU与内存或其他器件的数据传送 通常单向 宽度决定了CPU和外界的数据传送速度

1根传送一个bit,8根一个字节,16根一个字

数据总

CPU对外部器件的控制 双向 宽度决定了CPU对外部器件的控制能力

  • 内存地址空间

含义:CPU可寻到的内存单元称为内存地址空间。

举例:一个CPU地址总线宽度为10,那么可以寻址1024个内存单元,这个单元就是内存地址空间。

  • 主板

每一台PC机中,都有一个主板,主板上有核心器件和一些主要器件,它们都由地址总线相连。

器件举例:CPU、存储器、外围芯片、扩展插槽等

  • 接口卡

计算机系统中,所有可用程序控制其工作的设备,必须受CPU控制。CPU不能直接对外部设备控制。直接控制这些设备的是插再扩展插槽上的接口卡,从而实现CPU对外设备的间接控制。

CPU-----(总线)-----扩展插槽上的接口卡-----控制设备

  • 各类存储器芯片

从读写属性上分为随机存储器和只读存储器。

名称 属性
随机存储器 可读可写,必须带有电存储,关机后存储内容丢失。
只读存储器 只能读不能写,关机后其内容不会丢失。

从功能和连接上分为随机存储器、装有BIOS的ROM、接口卡上的RAM。

名称 属性
随机存储器 存放CPU使用的绝大部分程序和软件。
装有BIOS的ROM BIOS系统软件
接口卡上的RAM 暂时存储大批量输出、输出数据
  • 内存地址空间

那些存储器在物理上都是独立的器件,其共同两点:

1.都和CPU的总线相连。

2.CPU对它们进行读写操作的时候都通过控制总线发出读写命令。

:我们在基于一个计算机硬件系统编程的时候,必须知道这个系统中的内存地址空间分配情况。

汇编两种格式:AT&T——intel
注明:以下解释搬于https://www.cnblogs.com/hdk1993/p/4820353.html

AT&T 格式Linux 汇编语法格式

  1. 在 AT&T 汇编格式中,寄存器名要加上 '%' 作为前缀;而在 Intel 汇编格式中,寄存器名不需要加前缀。例如:

AT&T 格式

Intel 格式

pushl %eax

push eax

2.         在 AT&T 汇编格式中,用 '$' 前缀表示一个立即操作数;而在 Intel 汇编格式中,立即数的表示不用带任何前缀。例如:

AT&T 格式

Intel 格式

pushl $1

push 1

3.         AT&T 和 Intel 格式中的源操作数和目标操作数的位置正好相反。在 Intel 汇编格式中,目标操作数在源操作数的左边;而在 AT&T 汇编格式中,目标操作数在源操作数的右边。例如:

AT&T 格式

Intel 格式

addl $1, %eax

add eax, 1

4.         在 AT&T 汇编格式中,操作数的字长由操作符的最后一个字母决定,后缀'b'、'w'、'l'分别表示操作数为字节(byte,8 比特)、字(word,16 比特)和长字(long,32比特);而在 Intel 汇编格式中,操作数的字长是用 "byte ptr" 和 "word ptr" 等前缀来表示的。例如:

AT&T 格式

Intel 格式

movb val, %al

mov al, byte ptr val

5.         在 AT&T 汇编格式中,绝对转移和调用指令(jump/call)的操作数前要加上'*'作为前缀,而在 Intel 格式中则不需要。

6.         远程转移指令和远程子调用指令的操作码,在 AT&T 汇编格式中为 "ljump" 和 "lcall",而在 Intel 汇编格式中则为 "jmp far" 和 "call far",即:

AT&T 格式

Intel 格式

ljump $section, $offset

jmp far section:offset

lcall $section, $offset

call far section:offset

7.         与之相应的远程返回指令则为:

AT&T 格式

Intel 格式

lret $stack_adjust

ret far stack_adjust

8.         在 AT&T 汇编格式中,内存操作数的寻址方式是

section:disp(base, index, scale)

9.         而在 Intel 汇编格式中,内存操作数的寻址方式为:

section:[base + index*scale + disp]

10.     由于 Linux 工作在保护模式下,用的是 32 位线性地址,所以在计算地址时不用考虑段基址和偏移量,而是采用如下的地址计算方法:

disp + base + index * scale

架构:RISC精简指令集——CISC复杂指令集(以下三种汇编都在以上各自的架构上编写)

区别:CISC直接访问内存、RISC只能通过Load/Store访问内存。

X86、ARM、MIPS三种汇编指令的区同:

汇编基础----计算机结构简介--汇编简介

  • 32与64位寄存器

表达方式:

32位的寄存器前面会加E,如:eax.edi等待

64位的寄存器前面会加R,如:rax,rdi等等

64位和32位的寄存器和汇编的比较:https://blog.csdn.net/qq_29343201/article/details/51278798