x86汇编--1.王爽《汇编语言》

x86汇编--1.王爽《汇编语言》

  • 1 基础知识
    • 1.1 机器语言
    • 1.2 汇编语言的产生
    • 1.3 汇编语言的组成
    • 1.4 寄存器
    • 1.5 指令和数据
    • 1.6 存储单元
    • 1.7 CPU对存储器的读写
    • 1.8 地址总线
    • 1.9 数据总线
    • 1.10 控制总线
    • 1.14 各类存储器芯片
    • 1.15 内存地址空间
  • 2 寄存器
    • 2.1 通用寄存器
    • 2.2 字在寄存器中的存储
    • 2.3 几条汇编指令
    • 2.6 8086CPU给出物理地址的方法
    • 2.7 段地址X16+偏移地址=物理地址的理解
    • 2.8 段的概念
    • 2.9 段寄存器
    • 2.10 CS和IP
    • 2.11 修改CS、IP的指令
  • 3 寄存器
  • 参考

1 基础知识

1.1 机器语言

  • 机器语言是机器指令的集合。电子计算机的机器指令是一系列二进制数字。计算机将之转换为一系列高低电平脉冲信号来驱动硬件工作的。

1.2 汇编语言的产生

  • 机器语言难记忆、易出错、效率低下,之后诞生了汇编语言。汇编语言的主体是汇编指令。
  • 示例
    操作:寄存器BX的内容送到AX中
    机器指令:1000100111011000
    汇编指令:mov ax,bx
    x86汇编--1.王爽《汇编语言》_第1张图片

1.3 汇编语言的组成

汇编语言的组成如下,其中汇编指令时核心。

  • 汇编指令:机器码的助记符,有对应的机器码。
  • 伪指令:没有对应的机器码,由编译器执行,计算机并不执行。
  • 其他符号:如+、-、*、/等,由编译器识别,没有对应的机器码。

1.4 寄存器

1.5 指令和数据

  • 指令和数据对应到计算器都是二进制数据,同一个二进制数据可作为数据也可作为指令。
  • 示例:
    1000100111011000 -> 89D8H(数据)
    1000100111011000 -> mov ax,bx(指令)

1.6 存储单元

存储单元从零开始顺序编号。
一个存储单元可以存储8bit,一个字节。

1.7 CPU对存储器的读写

在计算机中专门有连接CPU和其他芯片的导线,通常称为总线。总线在物理上就是一根根导线的集合。根据传送信息的不同,总线从逻辑上又分为3类,地址总线、控制总线和数据总线。
x86汇编--1.王爽《汇编语言》_第2张图片

  • CPU通过地址线将地址信息3发出。
  • CPU通过控制线发出内存读命令,选中存储器芯片,并通知它,将要从中读取数据。
  • 存储器将3号单元中的数据8通过数据线送入CPU。写操作与读操作的步骤相似。

1.8 地址总线

  • CPU是通过地址总线指定存储单元,地址总线传送的能力决定了CPU对存储单元的寻址能力。(一般32位CPU,寻址能力为2^32=4G)

1.9 数据总线

  • CPU通过数据总线来与内存等器件进行数据传送,数据总线的宽度决定了CPU和外界的数据传送速度。

1.10 控制总线

  • 控制总线是一些不同控制的集合,CPU通过控制总线对外部器件的控制。控制总线的宽度决定了CPU对外部器件的控制能力。

1.14 各类存储器芯片

x86汇编--1.王爽《汇编语言》_第3张图片

1.15 内存地址空间

x86汇编--1.王爽《汇编语言》_第4张图片
每个物理存储器在这个逻辑存储器中占有一个地址段,即一段地址空间。CPU在这段地址空间中读写数据,实际上就是在相对应的物理存储器中读写数据(对ROM写无效)。
x86汇编--1.王爽《汇编语言》_第5张图片

2 寄存器

CPU由运算器、控制器、寄存器 等器件组成,靠内部总线相连。
内部总线实现CPU内部各器件之间的联系;外部总线实现CPU和主板上其他器件的联系。

2.1 通用寄存器

8086有14个寄存器:
AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、CS、ES、PSW。
AX、BX、CX、DX通常用来存放一般性数据,被称为通用寄存器。
16位寄存器所能存储的数据最大值为216-1 。
为保证兼容性,8086 CPU的通用寄存器可以分为两个独立的8位寄存器使用。例: AX可分为AH和AL。

2.2 字在寄存器中的存储

086 CPU所有的寄存器是16位,可以存放2个字节(一个字)。
x86汇编--1.王爽《汇编语言》_第6张图片
8086采用小端模式:高地址存放高位字节,低地址存放低位字节。

2.3 几条汇编指令

x86汇编--1.王爽《汇编语言》_第7张图片

2.6 8086CPU给出物理地址的方法

地址加法器采用物理地址=段地址X16+偏移地址的方法合成物理地址。
x86汇编--1.王爽《汇编语言》_第8张图片

2.7 段地址X16+偏移地址=物理地址的理解

以123C8为例的一个物理地址,16进制的寄存器存储不了,就分为基础地址和偏移地址,基础地址12300,16进制寄存器存储不了,就定规则为段地址X16,这个解决了物理地址的存储问题。

2.8 段的概念

地址10000H~100FFH的内存单元组成一个段,该段的起始地址(基础地址)为10000H,
段地址为1000H,大小为100H;也可以认为是地址10000H1007FH、10080H100FFH的内存单元组成两个段,该段的起始地址(基础地址)为10000H和10080H,段地址为:1000H和1008H,打小都为80H。
x86汇编--1.王爽《汇编语言》_第9张图片

2.9 段寄存器

8086 CPU有4个段寄存器:CS(代码段)、DS(数据段)、SS(堆栈段)、ES(附加段),这4个段提供给8086CPU内存单元的段地址。

2.10 CS和IP

CS(代码段寄存器) 和IP(指令指针寄存器) 是8086CPU中最关键的寄存器,它们指示了CPU当前要读取指令的地址。在任意时刻CPU将CS:IP指向的内容当作指令执行。
CS为代码段寄存器,IP为指令指针寄存器,
CPU将CS、IP中的内容当作指令的段地址和偏移地址,用它们合成指令的物理地址,
CPU将CS:IP指向的内容当作指令执行。(即PC)
x86汇编--1.王爽《汇编语言》_第10张图片
8086CPU的工作过程简要描述
从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器;
IP=IP+所读取指令的长度,从而指向下一条指令;
执行指令。转到步骤1,重复这个过程。

2.11 修改CS、IP的指令

  • mov指令(传送指令) 可以改变8086CPU大部分寄存器的值,但不能用于设置CS、IP的值。
  • jmp指令(转移指令) 可以用来同时修改CS和IP的值,格式为
jmp 段地址:偏移地址;同时修改CS和IP
jmp 某一合法寄存器;则是仅修改IP

3 寄存器

参考

1、《汇编语言》 [王爽]
2、x86汇编语言笔记(全)(长文警告)
3、王爽《汇编语言》笔记(详细)
4、汇编入门(长文多图,流量慎入)

你可能感兴趣的:(杂记)