物理内存介绍:
物理内存大小是由地址总线决定的 例子:8086cpu是20根地址总线,2的20次方字节等于1MB,所以8086cpu内存大小为1MB
cpu数据的传输速度是有数据总线决定的 例子:8086是16根地址总线,所以一次最多处理16位数据
物理地址:存存储器的实际地址,cpu读取存储器是所使用的地址
逻辑地址:
是在程序中使用的地址,由段地址和偏移地址组成,表示形式“段地址:偏移地址”
段地址:是指在逻辑段在主存中的起始位置
段内偏移地址:是指在主存单元距离段首地址的偏移量,由于8086cpu是16位寄存器,一段空间地址最大不超过64KB=2^16B,段空间是以16字节对齐的,所以段的空间是16的倍数开辟内存的
段的概念:内存没有分段,段划分是由于8086cpu用"物理地址=段地址+偏移地址"的方式给出内存单元的物理地址,使我们可以用分段的方式管理内存
错误认识:内存被划分为一个一个段,每一个段都有一个段地址
cpu在访问物理内存是先分配地址,在根据地址访问内存
物理地址=段地址+偏移地址
段地址放在段寄存器中 (cs,ds)中,偏移地址放在(IP)寄存器中,通过段寄存器和偏移寄存器确定物理地址,访问内存
注意:任何时刻,cs:IP存放的都是指令也就是说cpu读取cs:ip中的内容都当作指令执行
8086寄存器介绍:
8086有4个可以分为8个8位的寄存器也可以作为4个16位数据寄存器:AX:AH,AL BX:BH,BL CX:CH,CL DX:DH,DL
debug实模式下简单命令:
e是改变内存的值
r是查看修改寄存器
t是单步调试运行
u是把机器码对应汇编指令(反汇编)
d是查看内存
a是编写汇编指令
g是执行汇编指令
学习的简单汇编指令:
mov ax,[0] 在debug中[]代表内存单元,填写地址偏移量,[]没有填写段地址默认是ds
mov 传送指令(不能把数据直接传送到段寄存器上例如:mov cs,0011,这个汇编代码无效)
jmp改变cs:ip指令
sub 减法指令
add加法指令
dd和dup指令笔记:
dd(double word):定义两个字型数据,占4个字节
dup:dup操作符 它和db,dw,dd等数据定义的配合使用,进行数据重复
例子:db 3 dup(0) 定义字节数据0,重复3次 占3个字节 相当于 db 0,0,0
db 3 dup(0,1,2) 定义字节数据0,1,2 重复3次,占9个字节 相当于 db 0,1,2,0,1,2,0,1,2
dw 3 dup(0) 定义字数据0 ,重复3次,占3个字(6个字节) 相当于 dw 0,0,0
使用格式:db(定义的数据类型) 重复次数 dup (重复的数据)