c语言内存分配对应 一个小想法--理解指针的机制和汇编中的寄存器间接寻址,但是这个只对应IDATA存储器,DATA存储器用什么寻址方式?ROM,暂时可以理解MOVC A,@PC/DPTR,堆栈SP

c语言内存分配对应 一个小想法--理解指针的机制和汇编中的寄存器间接寻址

电脑杂谈  发布时间:2018-02-12 01:10:34  来源:网络整理

c语言内存分配对应 一个小想法--理解指针的机制和汇编中的寄存器间接寻址,但是这个只对应IDATA存储器,DATA存储器用什么寻址方式?ROM,暂时可以理解MOVC A,@PC/DPTR,堆栈SP,一般指针的编码中00表示IDATA/DATA/BDATA,IDATA,DATA区别标志为地址大于128为IDATA,小于128为DATA

变量可以理解为地址的宏定义(下一篇专门讲变量的定义伪指令,C语言中变量也来源于此)

?? ?? ?? C语言中,指针可以理解为:值为其所指变量的地址的变量,或简称存储地址的变量。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语言内存分配对应

问题:

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

?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??

参考资料:

汇编语言之寻址方式 ??


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-72743-1.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值