CPU执行010001…的机器指令,汇编指令可以被编译器翻译成机器指令。
内存的最小单位是字节byte 1byte=8bit
地址线:数量决定了CPU的寻址能力(能找到多大的地址)
数据线:决定了CPU和其他部件进行数据传送时,一次性可以传送多少数据
控制线:CPU对其他部件进行控制的能力
eg.
1.8080的地址总线宽度为16根,寻址能力为64KB。 2 16 = 2 6 × 2 10 {{2}^{16}}\text{=}{{2}^{6}}\times {{2}^{10}} 216=26×210。
2.8080的数据总线宽度为8根,一次可以传送的数据为1B。
内存空间:内存条(主内存)+显存 内存编号是区分开的,一段编号属于一种内存
RAM内存:允许读取写入,断电后指令和数据丢失
ROM内存:只允许读取,断电后指令和数据还存在(启动机器)
CPU通过内存地址访问内存空间,通过端口号访问鼠标键盘等外设
寄存器在CPU里面,存储了地址和数据信息。
汇编编程就是通过汇编指令去修改寄存器的值,从而控制CPU去控制整台计算机。
=======================================
AX BX CX DX四种寄存器很特殊,一方面可以作为16位寄存器(0-65535),另一方面可以分为两个独立的8位寄存器(AX=AH+AL)(0-255)。
寄存器和数据位数要对应,mov时几位寄存器对应几位寄存器,几位寄存器对应几位数据,否则会出错。
地址寄存器
8086CPU有20根地址线,但是他的段地址寄存器和偏移地址寄存器只有16位,为此约定:
段
地
址
×
16
(
10
H
)
=
基
础
地
址
段地址\times16(10H)=基础地址
段地址×16(10H)=基础地址
基
础
地
址
+
偏
移
地
址
=
物
理
地
址
基础地址+偏移地址=物理地址
基础地址+偏移地址=物理地址
从而借助16位寄存器具备20位的寻址能力。
注意:段地址有范围,如果过小,偏移地址取最大也无法找到物理地址,如果过大,偏移地址最小也无法找到物理地址。
CPU如何区分指令和数据?
答:内存中存的都一样,都是二进制,只在工作中区分,CS和IP指向的内存空间存的是指令。CS和IP决定CPU从哪里读取指令。
指令的长度是不一样的,可以由多个字节组成,执行过程如下:
1.CPU从CS:IP指向的内存空间读取指令存入指令缓存器
2.IP加上该指令的长度,从而指向下一条指令
3.执行该指令缓存器中的内容,回到步骤1
(之所以这样设计,是为了call指令返回IP指向的下一条指令)
转移指令改变CS和IP,mov不能用
jmp 2000:0
jmp ax
call 将改变了的ip值保存起来
debug调试工具
r 查看CPU所有寄存器的值,还可以修改
d 查看从任意位置开始的任意个内存内容
u 将内存中的机器指令翻译成汇编指令
a 在任意位置以汇编指令的格式在内存中写入
t 执行当前CS、IP所指向的机器指令
e 方便写入内存(机器码一个字节一个字节输入),写入字符的ASCII码
数据长度:字节型数据和字型数据,字型数据是2byte,有内存中地址连续的两个内存单元存放。
高地址 存放高位字节
低地址 存放低位字节
注意:字节型数据的1是01,字型数据的1是01 00。
mov ax,1
mov ds,ax 可以确定内存地址中的段地址