基础知识
汇编语言,有 3 类指令组成:
- 汇编指令:机器码的助记符,有对应的机器码。
- 伪指令:没有对应机器码,由编译器执行,计算机并不执行。
- 其他符号:如+、-、*、\,由编译器识别,没有对应机器码。
核心是编译指令。每一种 cpu 都有自己的汇编指令集。
存储器就是内存,存储器被划分为多个存储单元,从 0 开始顺序编号,一个存储单元就是一个字节(Byte)。存储器中指令和数据没有任何区别,都是二进制信息。
cpu 有 3 类总线:地址总线、数据总线、控制总线。
一个 cpu 有 n 根地址总线,则可以寻找 2 的 n 次方个内存单元。
n 根数据总线一次能传输 n 位,即 n bit。
控制总线是一些不同控制线的集合,有多少根控制总线,就意味着 cpu 提供了对外部器件的多少种控制。
内存地址空间:对 cpu 来说,系统中的所有存储器中的存储单元都处于一个统一的逻辑存储器中,它的容量受 cpu 寻址能力的限制。这个逻辑存储器即是所说的内存地址空间。
寄存器
一个典型的 cpu 由运算器、控制器、寄存器
等器件构成,这些器件靠内部总线相连。前一章说的总线,相对于 cpu 内部来说是外部总线。
不同 cpu,寄存器的个数、结构都不同。
通用寄存器
8086cpu 所有寄存器都是 16 位。AX、BX、CX、DX 这 4 个寄存器通常用来存放一般性数据,被称为通用寄存器。都可分为类似 AH 和 AL,BH 和 BL...
由于 8086 有 20 位地址总线,但 8086 是 16 位的,即在内部一次性处理、传输、暂时存储的地址只有 16 位,所以 8086 采用在内部用 2 个 16 位地址合成的方法来形成一个 20 位的物理地址。
地址加法器采用 物理地址=段地址x16+偏移地址
来合成物理地址。(也即左移 4 位,也即 x10H)。本质就是基础地址+偏移地址=物理地址
。
cpu 可以用不同的段地址和偏移地址形成同一个物理地址。
段寄存器
段地址存放在段寄存器中,8086 有 4 个段寄存器:CS、DS、SS、ES
CS 和 IP 是 8086 中两个最关键的寄存器,它们共同表示了 cpu 当前要读取指令的地址。CS 为代码段寄存器,IP 为指令指针寄存器。
问:cpu 根据什么将内存中的信息看做是指令?
答:cpu 将 CS:IP 指向的内存单元中的内容看做是指令。
在 cpu 中,程序员能用指令读写的部件只有寄存器。8086 大部分寄存器的值,都可以用mov
来修改,mov
称为传送指令。但不能用来设置 CS、IP 的值。
若想修改 CS、IP,可以用jmp
指令,形如jmp 段地址:偏移地址
。
若仅想修改 IP 的内容,可用形如jmp 某一合法寄存器
,如jmp ax
,可修改 IP 为 ax 中的值。
mov可以操作的有:寄存器和寄存器,立即数到寄存器,寄存器和段寄存器,寄存器和内存单元,段寄存器和内存单元
代码段
我们可以根据需要,将一组内存单元定义为一个段。我们可以将长度为 N(N<=64KB,因是 16 位)的一组代码,存在一组地址连续、起始地址为 16 的倍数的内存单元中,从而定义了一个代码段。那么代码段是如何被执行呢?只要将 CS:IP 指向代码段中第一条指令的首地址。
网友评论