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

      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


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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值