目录
1 学习汇编语言的理由
- 汇编语言仍在发挥不可替代的作用
- 效率
- 运行效率∶开发软件的核心部件,快速执行和实时响应。
- 开发效率∶做合适的事,开发效率无敌
- 底层∶计算机及外围设备的驱动程序
- 操作系统的内核
- 嵌入式系统:家用电器、仪器仪表、物联网....
- 效率
- 汇编语言在学习计算机中起到的独特作用——直击计算机系统的核心
- 便于加深对计算机原理和操作系统等课程的理解。
- 通过学习和使用汇编语言,能够感知、体会和理解机器的逻辑功能
- 向上为理解各种软件系统的原理,打下技术理论基础
- 向下为掌握硬件系统的原理,打下实践应用基础。
- 学会底层的程序调试和错误分析方法。
1.1 这门课学什么?
汇编语言程序设计
定位:理解硬件结构、掌握指令集、理解程序的运行过程。
内容:8088、8086指令集与汇编语言程序设计。
本课只解决入门:降低入门难度、关注核心思维与方法。
进一步延伸:Inter80x86汇编、Linux汇编、ARM汇编
学习方法:贯穿实践的方法、学会观察机器的内部状态
2 由机器语言到汇编语言
2.1 机器语言与机器指令
机器语言是机器指令的集合。
机器指令是一台机器可以正确执行的命令。
机器指令由遗传二进制数表示,例01010000
计算机内 电平脉冲
早期程序员工作状态:将0、1数字编程的程序代码打在纸带或卡片上,1打孔,0不打孔,再将程序通过纸带机或卡片机输入计算机,进行运算。
例:计算s = 768 + 12288 - 1280的程序
机器码∶ 101100000000000000000011
000001010000000000110000
001011010000000000000101
如果打错了,找程序错哪儿了很麻烦。
2.2 汇编语言和汇编指令
汇编语言的主体是汇编指令。
汇编指令和机器指令的差别在于指令的表示方法上
汇编指令是机器指令便于记忆的书写格式。
汇编指令是机器指令的助记符
机器指令:1000100111011000
操作:将寄存器BX的内容送到AX中
汇编指令:MOV AX BX
寄存器:CPU中可以存储数据的器件,一个CPU有多个寄存器。
2.3 用汇编语言编写程序的工作过程
3 计算机的组成
主板上有:
- CPU
- 总线
- 内存(条) :
- 拓展槽(接外部设备)
- CPU是计算机的核心部件,它控制整个计算机的运作并进行运算。要想让一个CPU工作,就必须向它提供指令和数据。
- 指令和数据在存储器(内存)中存放。(可放外存,但CPU工作时得从内存读取)
- 离开了内存,性能再好的CPU也无法工作。
3.1 指令和数据的表示
- 计算机中的数据和指令,存储在内存或磁盘上。
- 数据和指令,都是二进制信息。
- 问题:二进制信息1000100111011000是数据,还是指令?(看CPU怎么决定)
- 1000100111011000 -> 89D8H (数据)
- 1000100111011000 -> MOV AX,BX (程序)
- 数据如何表示?(写程序如何去做)
- 1000100110111000B(二进制)
- 89D8H(十六进制)
- 104730O(八进制)
- 35288D(十进制)
- 数据量∶B、KB、MB、GB、TB...
3.2 计算机中的存储单元
存储器被划分为若干个存储单元,每个存储单元从0开始顺序编号;
例如:一个存储器有128个存储单元,编号从0~127
实际:内存空间很“大”,8086有20条数据线,寻址空间2^20,为1MB。
2^20=1048576,FFFFFH=1048575O
3.3 计算机中的总线
在计算机中专门有连接CPU和其他芯片的导线,常称为总线。
物理上:一根根导线的集合;
逻辑上划分为:地址总线、数据总线、控制总线
地址总线:
- CPU是通过地址总线来指定存储单元的。
- 地址总线宽度,决定了可寻址的存储单元大小。
- N根地址总线(宽度为N ) ,对应寻址空间2N。
数据总线:
- CPU与内存或其它器件之间的数据传送是通过数据总线来进行的。
- 数据总线的宽度决定了CPU和外界的数据传送速度。
- 例:向内存中写入数据89D8H时的数据传送
控制总线:
- CPU通过控制总线对外部器件进行控制。
- 控制总线是一些不同控制线的集合
- 控制总线宽度决定了CPU对外部器件的控制能力。
x86CPU性能一览
CPU | 地址总线宽度 | 寻址能力 | 数据总线宽度 | 一次传送数据 | 读取1KB数据要读__次 |
8080 | 16 | 640KB | 8 | 1B | 1024 |
8088 | 20 | 1MB | 8 | 1B | 1024 |
8086 | 20 | 1MB | 16 | 2B | 512 |
80286 | 24 | 16MB | 16 | 2B | 512 |
80386 | 32 | 4GB | 32 | 4B | 256 |
4 内存的读写与地址空间
4.1 CPU对存储器的读写
CPU要想进行数据的读写,必须和外部器件进行三类信息的交互:
- (地址信息):存储单元的地址。(到哪儿去操作数据)
- (控制信息):器件的选择,读或写命令(寄存器/内存储空间/端口?;读/写?)
- (数据信息):读或写的数据
演示:
- 机器码:101000000000001100000000
- 16进制:A00300
- 汇编指令:MOV AL,[3]
- 含义:从3号单元读取数据送入寄存器AL
CPU通过地址线发出3给内存,内存找到3号单位的位置,然后CPU通过控制线发读的命令给内存,最后,内存通过数据线把3号单元的内容发给CPU。
4.2 内存地址空间
- 什么是内存地址空间
- CPU地址总线宽度为N,寻址空间为2B
- 8086CPU的地址总线宽度为20,那么可以寻址1MB个内存单元,其内存地址空间为1MB。
- 从CPU角度看地址空间分配:
- RAM:主板上的RAM、扩展槽上的RAM(例显卡)
- ROM:系统BIOS、接口卡上的BIOS
将各类存储器看做一个逻辑存储器——同一编址
所有的物理存储器被看做一个由若干存储单元组成的逻辑存储器。
每隔物理存储器在这个逻辑存储器中占有一个地址段,即一段地址空间。
CPU在这段地址空间中读写数据,实际上就是再相对应的物理存储器中读写数据。
以8086PC机为例,内存地址空间的分配方案:
5 汇编语言实践环境的搭建
实践方案——DOS环境
DOS操作系统——MS DOS方式——DOS虚拟机——DOS模拟器
具体见:6 汇编语言实践环境搭建_哔哩哔哩_bilibili
网课:通俗易懂的汇编语言(王爽老师的书)