首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

请教一个关于X寄存器的问题

请教一个关于X寄存器的问题

所用单片机为MC9S12DG128B
我把有效地址放在X寄存器中,我要怎要操作才能使X寄存器作为指针那样使用?
用汇编的话用 LEAX语句
LEAX是把有效地址放在X寄存器中,那接下来我想把某个寄存器中的值放到X寄存器所指向的内存单元应该怎么做?
STAA ,X
STAB ,X
STD ,X
海纳百川  有容乃大
在单独的汇编或者汇编作为C的子程序中使用没问题,但是在混编即在C语言中插入汇编中用这个会报错,编译过不了啊(C12087:Not a valid operand),应该如何解决?是否需要把这段插入的汇编做成子程序调用?
应该不会呵,是不是格式的问题?
海纳百川  有容乃大
#pragma CODE_SEG NON_BANKED //A/D中断
interrupt 22 void ADC_ISR()
{
asm{

LDAA ATD0DR0L; //把ATD0DR0L寄存器的值放到寄存器A中
STAA ,X //把A中的值放到X所指向内存单元
CPX #$1FFF; //判断X中的地址是否到了1FFF
BNE ad; //未到则跳转
LDX #$0502; //给X初赋值
ad:INX //X自加1
}
}
#pragma CODE_SEG DEFAULT
STAA ,X后少了一个分号?
海纳百川  有容乃大
不是少了个分号,这样写就通过了
STAA A,X
但是这样好像达不到STAA,X的效果了,即X指向的内存单元的值没被改变
X的值是怎么传递给中断的?你的主程序是C写的,并不能保证X的值保持不变。
海纳百川  有容乃大
程序以放在我的另一个相关问题中
真要这样用,这样即可:

STAA 0,X
海纳百川  有容乃大
知道了
谢谢
返回列表