汇编语言(1)

汇编语言(1)

汇编代码是计算机的一种低级表示,它是一种低级语言,可以从字面角度去理解它,包括处理数据、管理内存、读写存储设备上的数据,以及利用网络通信等。编译器生成机器码经过了一系列的转换,这些转换遵循编程语言、目标机器的指令集 和操作系统。


一、寄存器

处理器内部需要高速存储单元,用于暂时存放程序执行过程中的代码和数据,这些存储单元被称为寄存器(Register)。
处理器内部设计有多种寄存器,每种寄存器还可能有多个,从应用的角度可以分成两类:透明寄存器和可编程寄存器。

内部总线

之前讨论的总线是CPU控制外部设备使用的总线,是将CPU和外部部件连接的。而CPU内部由寄存器,运算器,控制器等组成,由内部总线相连,内部总线负责连接CPU内部的部件。

通用寄存器

这类寄存器在处理器中数量较多、使用频度较高,具有多种用途。例如它们可用来存放指令需要的操作数据,又可用来存放地址以便在主存或I/O接口中指定操作数据的位置。

8086CPU寄存器都是16位的,一共14个,分别是AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS,ES,PSW。其中AX,BX,CX,DX四个寄存器通常存放一般性的数据,称为通用寄存器。

而且为了兼容上一代的8位寄存器,这四个寄存器可以拆开成两个8位的寄存器来使用。称为AH,AL,BH,BL,CH,CL,DH,DL。低八位(编号0-7)构成L寄存器,高八位构成H寄存器。


8086CPU可以处理以下两种数据

字节byte,8位
字word,连个字节,16位。分别称为高位字节和低位字节。
寄存器是16位的,可以存放一个字即两个字节,而内存中的一个存储单元是一字节。所以一个寄存器可以存两个存储单元的内容,高地址存储单元存在高位字节中,低地址存储单元存在低位字节中。

字单元:存放一个字型数据的两个地址连续的内存单元。

专用寄存器

这类寄存器各自只用于特定目的。例如程序计数器PC(Program Counter)只用于记录将要执行指令的主存地址,标志寄存器保存指令执行的辅助信息。

标志寄存器

标志(Flag)用于反映指令执行结果或控制指令执行形式。许多指令执行之后将影响有关的状态标志位;不少指令的执行要利用某些标志;当然,也有很多指令与标志无关。处理器中用一个或多个二进制位表示一种标志,其0或1的不同组合表达标志的不同状态。Intel 8086支持的9个标志,分为状态标志和控制标志两类,采用一个16位的标志寄存器FLAGS保存

指令指针寄存器

程序由指令组成,指令存放在主存储器中。处理器需要一个专用寄存器表示将要执行的指令在主存的位置,这个位置用存储器地址表示。在 8086 处理器中,这个存储器地址保存在16位指令指针寄存器IP(Instruction Pointer)中。

指令指针寄存器IP一个是专用寄存器,具有自动增量的能力。处理器执行完一条指令, IP就加上该指令的字节数,指向下一条指令,实现程序的顺序执行。需要实现分支、调用等操作时需要修改 IP,它的改变将引起程序转移到指定的指令执行。但IP 寄存器不能像通用寄存器那样直接赋值修改,需要执行控制转移指令(如跳转、分支、调用和返回指令)、出现中断或异常时被处理器赋值而相应改变。

段寄存器

一个程序当中,有可以执行的指令代码,还有指令操作的各类数据等。遵循模块化程序设计思想,希望将相关的代码安排在一起,相关的数据安排在一起,于是(区)段(Segment)的概念自然出现。一个段安排一类代码或数据。程序员在编写程序时,可以很自然地把程序的各部分放在相应的段中。对应用程序来说,主要涉及3类基本段:存放程序中指令代码的代码段(Code Segment)、存放当前运行程序所用数据的数据段(Data Segment)和指明程序使用的堆栈区域的堆栈段(Stack Segment)。

段其实就是主存的一个连续区域,为了表明段在主存中的位置,8086处理器设计有4个16位段寄存器:代码段寄存器CS,堆栈段寄存器SS,数据段寄存器DS和附加段寄存器ES (Extra Segment)。其中,附加段也是用于存放数据的数据段,专为处理数据串设计的串操作指令必须使用附加段作为其目的操作数的存放区域

二、指令集

指令集就是指挥计算机工作的指令,因为程序就是按照一定执行顺序排列的指令。因为计算机的执行控制权由 CPU 操作,所以指令集就是 CPU 中用来计算和控制计算机的一系列指令的集合。每个 CPU 在产出时都规定了与硬件电路相互配合工作的指令集。
指令集有不少分类,但是一般分为两种,一种是精简指令集,一种是复杂指令集。

1.精简指令集

精简指令的英文是 reduced instruction set computer, RISC,原意是精简指令集计算,简称为精简指令集,是 CPU 的一种 设计模式,可以把 CPU 想象成一家流水线工厂,对指令数目和寻址方式都做了精简,使其实现更容易,指令并行执行程度更好,编译器的效率更高。
常见的精简指令集处理器包括 ARM、AVR、MIPS、PARISC、RISC-V 和 SPARC。
精简指令集一般具有如下特征:

统一的指令编码
通用的寄存器,一般会区分整数和浮点数
简单的寻址模式,复杂寻址模式被简单指令序列来取代
支持很少偏门的类型,例如 RISC 支持字节字符串类型。

2.复杂指令集

复杂指令集的英文是 Complex Instruction Set Computing, CISC,是一种微处理器指令集架构,也被译为复杂指令集。
复杂指令集包括 System/360、VAX、x86 等。
复杂指令集可以说是在精简指令集之上作出的改变。
复杂指令集的特点是指令数目多而复杂,每条指令字长并不相等,计算机必须加以判读,并为此付出了性能的代价。
一般来说,提升 CPU 性能的方法有如下这几种:

增加寄存器的大小
增进内部的并行性
增加高速缓存的大小
增加核心时脉的速度
加入其他功能,例如 IO 和计时器
加入向量处理器
硬件多线程技术

三、一些硬件概念

CPU

是计算机的大脑,它也是整个计算机的核心,它也是执行汇编语言的硬件,CPU 的内部包含有寄存器,而寄存器是用于存储指令和数据的,汇编语言的本质也就是 CPU 内部操作数所执行的一系列计算。

内存

没有内存,计算机就像是一个没有记忆的人类,只会永无休止的重复性劳动。CPU 所需的指令和数据都由内存来提供,CPU 指令经由内存提供,经过一系列计算后再输出到内存。

磁盘

磁盘也是一种存储设备,它和内存的最大区别在于永久存储,程序需要在内存装载后才能运行,而提供给内存的程序都是由磁盘存储的。

总线

一般来说,内存内部会划分多个存储单元,存储单元用来存储指令和数据,就像是房子一样,存储单元就是房子的门牌号。总线就是一根根导线的集合,而 CPU 与内存之间的交互是通过地址总线来进行的,总线从逻辑上分为三种:

地址总线

CPU 通过地址总线来指定存储位置的,地址总线越宽(数量越多)代表可以寻址的范围越大。
如果 CPU 有 N 条地址总线,那么可以说这个地址总线的宽度是 N 。这样 CPU 可以寻找 2 的 N 次方个内存单元。

数据总线

PU 与内存或其他部件之间的数据传送是由数据总线来完成的。数据总线的宽度决定了 CPU 和外界的数据传输速度。数据总线越宽代表一次性读写的数据越多(8根1字节)。

控制总线

CPU 与其他部件之间的控制是通过 控制总线 来完成的。有多少根控制总线,就意味着 CPU 提供了对外部器件的多少种控制。控制总线越宽代表对器件控制操作越多。
在这里插入图片描述
CPU 与存储器之间的读写主要经过以下几步:

读操作步骤

CPU 通过地址线发出需要读取指令的位置
CPU 通过控制线发出读指令
内存把数据放在数据线上返回给 CPU

写操作步骤

CPU 通过地址线发出需要写出指令的位置
CPU 通过控制线发出写指令
CPU 把数据通过数据线写入内存

总结

汇编指令和机器指令一一对应

每一种cpu都有自己的汇编指令集

在存储器中指令和数据都是二进制,没有任何区别

CPU可以直接使用的信息存放在存储器中(内存)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值