汇编语言
豆瓣:https://book.douban.com/subject/35038473/
第4版 作者:王爽 2019年出版。
应该是关于汇编最好的书。目标:阅读不下三遍。
汇编定义与组成
汇编语言是各种CPU提供的机器指令的助记符的集合;可以用汇编语言直接控制硬件系统进行工作。
针对不同的处理器架构,汇编语言将提供不同的助记形式。实际上,即使是针对同一种处理器架构,也可能会有人使用本质上一样,但风格不同的助记形式。比如说,针对英特尔x86架构的处理器,就有AT&T和INTEL公司自己的风格。在本书中,我们将采用英特尔风格的汇编语言助记形式。
控制总线 地址总线 数据总线
存储器
存储器分类
主存储器(内存):主板上的RAM 扩展插槽上的RAM
显存:显卡上的RAM
ROM:主板和某些接口卡都有ROM,主板上的ROM,存储系统BIOS;显卡ROM存储显卡的BIOS,如果网卡装有ROM,那就可以存储网卡的BIOS。
主存储器 == 内存; 内存包括RAM和各种ROM
辅助存储器 == 外存; 外存包括硬盘(HDD/SSD)、光盘、U盘等。
虚拟存储器:通过将硬盘空间的一部分作为内存使用,扩展计算机的可用内存空间。当物理内存不足时,操作系统会将部分数据从内存移动到虚拟内存(硬盘中的交换文件或分页文件)。
缓存存储器: 位于CPU内部或靠近CPU的高速存储器,用于临时存储CPU频繁访问的数据和指令,减少CPU访问主内存的次数,提高系统性能。常见的有L1、L2和L3缓存。
网络存储: NAS等。
存储单元
微型机存储器的存储单元为1字节(Byte),1字节=8位(bit)。
关于存储器,可以看一下这篇知乎回答:存储器的种类:ROM、RAM、FLASH。
RAM和ROM的区别
RAM(Random Access Memory)随机存取存储器,断电后数据会丢失,所以RAM也叫易失性存储器。ROM(Read-Only Memory)只读存储器,断电后数据不会丢失,所以ROM也叫非易失性存储器。
DRAM一般用来做内存,SRAM一般用来做缓存(CPU里面的缓存)。ROM用来烧录BIOS。
内存地址空间
最终运行程序的是CPU,我们用汇编语言编程的时候,必须要从CPU的角度考虑问题。对CPU来讲,系统中的所有存储器中的存储单元都处于一个统一的逻辑存储器中,它的容量受CPU寻址能力的限制。这个逻辑存储器即是我们所说的内存地址空间。
检测点1.1
题目以及答案:
- https://blog.csdn.net/qq_37397652/article/details/125221005
- https://blog.csdn.net/qq_43276544/article/details/136352713
CPU组成
8086CPU寄存器总览
共14个寄存器。都是16位的。
AX / BX / CX / DX / SI / DI / SP / BP / IP / CS / SS / DS / ES / PSW
通用寄存器:AX / BX / CX / DX / SI / DI / BP / SP
段寄存器:CS / DS / SS / ES
CPU对内存的分段管理
CPU在访问内存时要由段寄存器提供内存单元的段地址和偏移地址,送入地址加法器合成物理地址。
偏移地址16位,最大寻址能力为64KB(容量为2^16,0000H~FFFFH),所以一个段最大长度为64KB。
CS和IP寄存器
修改CS和IP寄存器的值:
实验1
通过实验熟悉以上常用6个基本命令。
检测点3.1
很好的题目。解答:https://blog.csdn.net/weixin_73048520/article/details/129955387
重点理解:
1.不同逻辑地址上可能代表同一个物理地址。
2.mov不能直接给段寄存器赋值,可以通过通用寄存器。
3.AX中存放的大小是字,AL中存放的大小是字节。
16进制数值注意点
源代码中不能以字母开头,字母开头的数值要加0,在debug中则不用。debug命令和代码不区分大小写。
数字后面加h/H,在debug中不用加h,默认就是当做16进制来处理的。
实验4解析
https://www.cnblogs.com/tsembrace/p/3251774.html
asm
;只写关键代码
;每次复制单字节数据,并通过al中转
;程序入口为cs:0(ip=0),所以第一空处传递段地址为cs
;接下来需要确定循环次数,即mov ax,4c00h之前的代码长度
;而程序总代码长度可通过debug加载后通过u命令看出
;先将第二空位随便设为1,加载后观察mov ax,4c00h之前代码为0000~0016h,总长度为23.
...
mov ax,cs
mov ds,ax
mov ax,0020h
mov es,ax
mov bx,0
mov cx,23
s:
mov al,[bx]
mov es:[bx],al
inc bx
loop s
mov ax,4c00h
...