...
求物理地址时基本上恩他们没太大关系吧。。
他们只是存放数据的寄存器(相当与变量),比如把1234放到cs里,以后写cs就是1234这个东东。
然后后来就有人规定一些东西一般只放特定含义的东西。
怎么说呢,就像2l说的cs是放段基址的,在8086里一个20位的地址是由2个16位的地址构成的,所以要两个16位的寄存器才能表示一个地址,cs里的内容+另一个特定的寄存器里的内容构成一个特定的地址而且这个地址是程序的......ds+另一个构成...数据地址的..ss一般用于堆栈的。比较复杂,还是看看书把,和寻址有关。当访问不同的东西(程序,数据,堆栈)时会配上不同的(cs,ds,ss)段寄存器。
至于物理地址的求法:
一个8086里地址是20位的它由两个16位的数构成,一个叫段地址,一个叫偏移地址,
实际物理地址=段地址*10H+偏移地址,
10H是十六进制的10,(一般地址都是给出16位的形式。所以一般就是段地址后面加个0再与偏移地址相加。在程序中依据访问不同内容段地址在cs,ds,ss中选(特殊的寻址除外),例如用ip做偏移地址时,会调用cs作为段地址,实际物理地址就是cs*10h+ip,...)
CS:代码段寄存器,存放有代码段的段基地址,指针是IP。
IP:指令指针寄存器,存放的是下一条指令的偏移地址。所以下一条指令的物理址=CS*16+IP
DS:数据段寄存器,存放你定义好的数据段的段基地址,指针是SI或DI
SS:堆栈段寄存器,存放堆栈段的基地址,指针是SP(堆栈段指针寄存器)
CS DS SS分别表示 代码段 数据段 堆栈段寄存器 还有一个是ES 附加数据段寄存器
汇编语言中有 指令性语句 和指示性语句 而这些都属于指示性语句 在你没写一个汇编语言程序时
开头都要先定义 然后 会出现 代码段CS 和数据段DS 需要时还有附加数据段ES 要进行堆栈操作时有SS
不过在程序编译后不会对指示性语句经行翻译 在DEBUG下只能看到指令性语句的翻译
IP(instruction pointer)是指令指针寄存器,是一个16位寄存器,用来存放代码段中的偏移地址。他与CS连用才能确定下一条指令的地址,根据这一地址,控制器从指定的存储器中,取出下一条要执行的指令,并修改IP,以便指向下一条要执行的指令。可见IP
寄存器是用来控制指令系列的执行流程的。