一个小想法--理解指针的机制与汇编中的寄存器间接寻址

      C语言中,指针可以理解为:值为其所指变量的地址的变量,或简称存储地址的变量。

      指针存储的内容不是具体的值,而是系统分配给对应变量的地址,这样,通过对指针(变量地址)的操作就可以实现对变量的操作,如赋值,查询,删除,甚至释放变量内存。

       在汇编或者说处理器中,在实现运算,访问等操作时,有多种寻址方式,如


       一,.立即寻址方式(immediate addressing)

       MOV  AX, 3064H             ;操作数3064H直接就在语句中给出


        二,直接寻址方式(direct addressing)

        MOV  AL, [78H]             ;给出操作数的地址,通过访问此地址取得操作数


         三,寄存器寻址方式(register addressing)

        MOV  BX, AX                    ; 将其他的寄存器的值直接赋值给当前寄存器


       


        其中有一种寻址方式为寄存器间接寻址方式(register indirect addressing),如

        MOV  AL, [BX]  

        其中,寄存器BX存储的并不是要访问的操作数(假定为3064H),而是此操作数(3064H)所在的地址,通过访问BX中的地址达到访问(取得)操作数的目的。


       此处,寄存器BX的效果和C语言的指针有异曲同工之妙。


问题:

       “C语言中的指针本身的地址由系统自动分配,同样由其回收”(天勤书上),此处的“系统”应该是指编译器,从CPU层次上看,寄存器级别的访问应该是最快的,那么C的编译器能否将C代码中指针由寄存器实现呢(数量上肯定不可能为每一个指针分配一个寄存器,但是个别呢),(①C的编译器有此权限吗(直接访问寄存器),还是说只有操作系统才有权限   ②就算有,可以这样做吗)

                         

参考资料:

汇编语言之寻址方式   http://blog.csdn.net/qq_35668537/article/details/74279554


声明:除已注明的引用外,文章系作者原创,引用转载请注明出处,如有必要请联系作者。

猜你喜欢

转载自blog.csdn.net/prolayman/article/details/79311889