c实现汇编数据传送类指令(单片机存储器编址模式)

本文详细介绍了C语言如何实现单片机汇编中的数据传送指令(mov、movc、movx),并解释了Keil中MemoryModel的三种模式(small、compact、large)及其在C指针变量访问内存时的作用。
  

c实现汇编数据传送类指令

作者:guolele

        (单片机) 汇编一共有三个数据传送指令,分别是mov 、 movc 、 movx,其中mov是对内部数据存器的数据传送;movc是对程序存储器的数据传送主要用于查表功能(在程序里定义了一个表,然后读表的地址);movx是对外部数据存储器数据传送功能,那C语言是如何实现这些操作呢?

 

         在keil里,Memory Model有三种模式,分别是small  compact  large,这几种模式是什么意思?这几个就是说变量存在哪个位置,

如果是small就存在内部ram

compact变量存储在外部ram里,使用页8位间接寻址

Large:变量存储在外部Ram里,使用16位间接寻址

讲这些有什么用?因为C指针变量访问内存,是跟变量本身的存储空间有关系的。

假如是small,定义一个变量unsigned char *ptr=0x00,如果要访问这个地址*ptr = 0x55;如果用这样的操作,就是直接对内部ram操作,因为ptr是保存在内部ram里的(如果不指明,默认使用memory mode的存储位置)。

如果想访问其他存储区,如程序的就应该是:

Unsigned char code *ptr=0x00;

*ptr = 0x55;

同理,如果是外部存储区的,就是

Unsigned char xdata *ptr=0x00;

*ptr = 0x55;

 

其memory mode不同的只是在于默认存储位置

有种比较奇怪的现象是stc12c5a60s2里的叫内部拓展ram,说是内部,却是外部的使用方法,奇怪奇怪

对于arm是不存在这样的问题,因为可以所有的存储器包括IO都是统一编址的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值