汇编学习笔记---第二讲
接着上面的,补充一下 16进制的一位对应二进制的4位,也就指一次性传输一位16进数需要四根数据线或地址线,因此,16位地址总线一次最多只能传四位16进制的数。如果地址总线是20位,那意味着一次可传5位16进制数。cpu也就需要通过加法器来把两个16进制数计算成表示成20位。这时大家有问题,是什么把段地址和偏移地址传给cpu的呢?
这也是当初我的困惑。是这样的,由于cpu有许多寄存器,其中有两个寄存器 代码寄存器 cs 指针寄存器 ip 这两个寄存器是用来存放计算机指令所在的内存地址信息的。cpu所执行的任何指令都是通过这两个寄存器来给地址的。由于cpu供电复位时,默认将cs寄存器地址置FFFFH IP地址置0000H 此时,cs就是段地址 ip就是偏移地址,cpu通过加法器算出物理地址FFFF0H,cpu一通电就主动到这个内存地址读取指令执行。以后所有程序的运行,只需要将cs:ip地址指向该程序的内存地址就可以运行该程序了。那指令里面又指定了另外的内存地址,cpu读取后继续加法算出物理地址,再读取指令执行。。。。 详细后面会讲。
现在先讲讲寄存器:
cpu 内部拥有几种类型的寄存器,分别是 数据寄存器(俗称通用寄存器)、段寄存器、指针寄存器、控制寄存器
数据寄存器分为: AX,BX,CX,DX
段寄存器:CS 代码段 ds 数据段 SS 椎栈段 ES 附加段
指针寄存器: SP 椎栈指针 BP基址指针 SI 源地址指针 DI 目的地址指针
控制寄存器: IP 指令指针 FLAG 标志寄存器