机器语言,机器语言就是0101组成的世界,计算机通过0101执行指令,但是总不能让程序员写0101吧? 既不好记,可读性又差,且容易出错,所以也就有了汇编语言,汇编语言主要是把特定的语句翻译成0101代码
执行的过程是:程序员->汇编指令->编译器->机器码(0101)->计算机
存储器
计算机中最小的存储单元是 bit
,也就是一个二进制位
8bit = 1byte(字节)
一个存储单元可以存放1个byte,即8bit,如 0000 1100
CPU对存储器的读写
CPU是通过总线来跟存储器通信的,总线从逻辑上分为地址总线,控制总线,数据总线
地址总线主要是对地址进行传输,每根导线都有低电平和高电平,用二进制来表示就是0和1,10根导线可以传送10位二进制数据,而10位二进制数据有2的10次方的数据组合。
数据总线主要是对数据进行传输,8根数据总线一次可传送8位2进制
控制总线是个总称,控制总线的宽度决定了CPU对外部器件的控制能力
寄存器
一个典型的CPU由运算器,控制器,寄存器等构成
- 运算器进行信息处理
- 寄存器进行信息存储
- 控制器控制各种器件进行工作
- 内部总线连接各种器件,在它们之间进行数据传送
通用寄存器
AX,BX,CX,DX这4个称为通用寄存器,通常用来存放一般性的数据,由于这些寄存器是16位的,为了兼容旧代CPU,所以可拆分了8位
AX = AH + AL
BX = BH + BL
CX = CH + CL
DX = DH + DL
段的概念
段寄存器
CS和IP是CPU中两个关键的寄存器,CS为代码寄存器,IP为指令指针寄存器,假设CS = M,IP为N,CPU将从Mx16+N
单元开始读取一条指令并执行。执行过程:
1.cs与ip放入地址加法器,计算得到地址
2.地址总线传送该地址,然后在内存中找到该值
3.值通过数据总线传送回cpu的控制电路
4.送入到指令缓存器
5.执行控制器执行指令
修改CS、IP指令
修改普通寄存器的指令类似于 MOV ax,16
, move bx,123
,表示把16送进ax寄存器,把123送进bx寄存器,大部分都可以通过mov指令来修改寄存器,mov指令被称为传送指令
但是,mov指令不能用于设置CS和IP,因为它们有专用的指令jmp
,用法:jmp 段地址:偏移地址
寄存器(内存访问)
mov指令
1.将数据送入寄存器
2.将一个寄存器中的内存送入到另一个寄存器
3.将内存单元地址送入到寄存器 mov 寄存器名,内存单元地址
,mov a1, [0]
[...]表示一个内存单元,[...]中的0表示内存单元的偏移地址
段地址默认存放在DS中
CPU的栈机制
在8086CPU中,有两个寄存器,SS和SP,SS存放栈顶地址,SP存放偏移地址,任意时刻,SS:SP执行栈顶元素。push指令和pop指令执行时,CPU从SS和SP中得到栈顶地址。