这只是新手学习汇编的一个小笔记,帮助自己理解的,不建议观看!
一、段寄存器:
前面的学习,已经知道了8086 cpu在访问内存时,要由相关部件提供内存单元的段地址和偏移地址,接着送入地址加法器合成物理地址,产生的段地址在cpu的段寄存器中存放着,8086 cpu有4个段寄存器:CS、DS、SS、ES;
二、CS、IP寄存器:
这两个寄存器是8086 cpu中比较关键的寄存器,它指示了CPU当前要读取指令的地址,CS为代码 段寄存器,IP为指令指针寄存器,假设任意时刻,CS的值为M,IP的值为N,那么8086 cpu将从M*16+N单元开始读取一条指令并执行;
读取命令并执行的大致过程:
1、根据CS和IP的值,在地址加法器中产生物理地址;
2、将物理地址送入输入输出控制电路;
3、输入输出控制电路将物理地址送入地址总线;
4、读取以物理地址单元开始的一条指令,并通过数据总线送入cpu ;
5、输入输出控制电路,将读取到的指令送入到指令缓冲器,以备cpu执行;
6、读取数据完成后,IP寄存器的的值自动增加,以指向下一条命令的起始单元,增加的值是当前读取完成的指令的字节数;
7、执行控制器开始执行命令,完成相关的操作;
8、接着根据当前CS和IP的值,读取下一条指令;
在8086 cpu加电启动或者复位后,CS和IP的值被设置为FFFFH和0000H,即是说,CS和IP寄存器的内容提供了CPU要执行的命令的地址;在任何时候,CS和IP指向的地址单元的数据被当作指令;
三、修改CS、IP的指令:
CS和IP的值,决定了CPU从何处开始执行指令;8086中的大部分寄存器的值都可以使用mov指令来修改,比如:mov ax,123;mov指令被称为传送指令。mov指令不能用于设置CS、IP的值,想修改这个得使用jmp指令;它被称之为转移指令;若想同时修改CS:IP的值,可以这样:jmp CSvalue:IPvalue;也可以只修改IP寄存器的值:jmp IPvalue