学习参考:
https://helijian.blog.csdn.net/article/details/60885095
参考贺利坚老师的汇编课程
1. 汇编作用
1.1 汇编是所有语言的老祖宗
1.2 不可替代的使用场景
汇编语言仍在发挥不可替代的作用:
-
效率
. 运行效率:开发软件的核心部件,快速执行和实时响应。
. 开发效率:做合适的事,开发效率无敌 -
底层:计算机及外围设备的驱动程序
. 操作系统的内核
. 嵌入式系统:家用电器、仪器仪表、物联网…… -
汇编语言在学习计算机中起到的独特作用——直击计算机系统的核心
- 便于加深对计算机原理和操作系统等课程的理解。
- 通过学习和使用汇编语言,能够感知、体会和理解机器的逻辑功能
- 向上为理解各种软件系统的原理,打下技术理论基础
- 向下为掌握硬件系统的原理,打下实践应用基础。
- 学会底层的程序调试和错误分析方法。
1.3 学习内容
定位:理解硬件结构,掌握指令集,理解程序的运行过程
内容: 8088、8086指令集与汇编语言程序设计
视频, 加上自己动手实践;
2. 机器语言到汇编语言
2.1机器语言与机器指令
-
机器语言是机器指令的集合。
-
机器指令是一台机器可以正确执行的命令。
机器指令由一串二进制数表示,例 01010000
电平脉冲:
早期程序员们的工作形态
将 0、1 数字编程的程序代码打在纸带或卡片上,1打孔,0不打孔,再将程序通过纸带机或卡片机输入计算机,进行运算。
:例:计算S = 768 + 12288 - 1280的程序
:机器码
2.2汇编语言与汇编指令
: 汇编语言的主体是汇编指令。
汇编指令和机器指令的差别在于指令的表示方法上
汇编指令是机器指令便于记忆的书写格式。
汇编指令是机器指令的助记符。
机器指令: 1000100111011000
操作:将寄存器BX的内容送到AX中
汇编指令:MOV AX, BX
寄存器:CPU中可以存储数据的器件。
一个CPU中有多个寄存器。
2.3用汇编语言编写程序的工作过程
- 伪指令, 编译器执行
- 汇编指令,机器码的助记符;
- 其他符号, 编译器识别
3. 计算机的组成
3.1 计算机的组成
CPU 是计算机的核心部件,它控制整个计算机的运作并进行运算。要想让一个CPU工作,就必须向它提供指令和数据。
指令和数据在存储器(内存)中存放。离开了内存,性能再好的CPU也无法工作
3.2 指令和数据的表示
计算机中的数据和指令,存储在内存或磁盘上。
指令和数据是存放在存储器中的,而计算机包含多种存储器;
但是,在计算机工作的过程中, 指令和数据则必须存放到内存中
。
而对于cpu 而言,访问指令和数据都是从内存中读取或写出;
数据和指令,都是二进制信息。
问题:二进制信息1000100111011000是数据,还是指令?
; 1000100111011000 ─> 89D8H (数据)
; 1000100111011000 ─> MOV AX,BX (程序)
同样是一串二进制数, 到底代表的是数据还是指令, 这取决于cpu 如何去使用它
。
-
数据如何表示?
; 1000100111011000B (二进制)
; 89D8H (十六进制)
; 104730O(八进制)
; 35288D(十进制) -
数据量:B、KB、MB、GB、TB…
3.4 计算机中的存储单元
每个存储单元中,放一个字节的数据;
存储器被划分为若干个存储单元,每个存储单元从0开始顺序编号;
例如:
一个存储器有128个存储单元,
编号从0~127,
如右图示:
实际
内存空间很“大”,
8086有20条数据线,
20位,代表5个十六进制数
;
寻址空间 2 20 2^{20} 220,为1MB
3.5 计算机中的总线
在计算机中专门有连接CPU和其他芯片的导线,通常称为总线。
物理上:一根根导线的集合;
逻辑上划分为
. 地址总线
. 数据总线
. 控制总线
逻辑上划分:
- 地址总线
CPU是通过地址总线来指定存储单元的。
• 地址总线宽度,决定了可寻址的存储单元大小。
• N根地址总线(宽度为N),对应寻址空间 2 N 2^N 2N
- 数据总线
CPU与内存或其它器件之间的数据传送是通过数据总线来进行的。
• 数据总线的宽度决定了CPU和外界的数据传送速度。
例:向内存中写入数据89D8H时的数据传送
- 控制总线
CPU通过控制总线对外部器件进行控制。
• 控制总线是一些不同控制线的集合
• 控制总线宽度决定了CPU对外部器件的控制能力。
4. 内存的读写与地址空间
4.1 CPU对存储器的读写
CPU要想进行数据的读写,必须和外部器件进行三类信息的交互:
- 存储单元的地址
(地址信息) - 器件的选择(选择是寄存器,内存组空间,端口,),读或写命令
(控制信息) - 读或写的数据
(数据信息)
机器码: 101000000000001100000000
16进制:A00300
汇编指令:MOV AL,[3]
含义:从3号单元读取数据送入寄存器AL;
执行操作,将编号为3的内存单元中的数据,送到寄存器AL 中,包含三个步骤;
- cpu 要读取的内存地址 通过地址线送到内存单元中,找到对应的地址;
- 控制器通过控制线, 发出读命令到内存单元;
- 从对应地址的内存单元中取出数据送到寄存器中;
4. 2 内存地址空间
RAM: 可读可写;
ROM: 只读存储器, 计算机启动时需要用到的信息,比方系统的BIOS;
什么是内存地址空间
:
代表了可以有多少空间容量,专门用来存放地址的。
CPU地址总线宽度为N,寻址空间为 2 N 2^N 2NB
8086CPU的地址总线宽度为20,那么可以寻址1MB个内存单元,其内存地址空间为1MB。
从CPU角度看地址空间分配
4.3 统一编址
将各类存储器看做是一个逻辑存储器,统一编址;
所有的物理存储器被看作一个由若干存储单元组成的逻辑存储器;
4.4 内存地址空间的分配方案
每个物理存储器在这个逻辑存储器中占有一个地址段,即一段地址空间;
CPU在这段地址空间中读写数据,实际上就是在相对应的物理存储器中读写数据。