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

被折叠的 条评论
为什么被折叠?



