我尝试CLRX(.B,.A) dst
在 MSP430F2618微控制器(UC)上执行命令时了解编译器的行为。
具体来说、我将尝试掌握扩展指令的寻址模式。
我对源寻址模式感到困惑。 我预计它将处于立即寻址模式、但编译器似乎将其视为处于寄存器寻址模式。 这很复杂、尤其是当我正确解释手册时。
根据 MSP430F2618设计手册、CLRX(.B,.A) dst
是一个模拟指令并被转换为MOVX(.B,.A) #0,dst
。 因此,应将其编译为MOVX
。
我查阅了 dis430生成的 asm 文件、实际上、我发现了预期的扩展 MOV 指令:
01182c: 0018 CLRX.A 0x00000(SP) 01182e: C143 011830: 0000
该指令使用三个字。 计算字节序,0018
转换为1800
、和C143
43C1
。
这里、43C1
表示 asflag = 0
和adFlag=1
。 asflag
值0表示非扩展指令和扩展指令的寄存器寻址模式。 这是我的困惑所在。 根据不使用430生成的文件、它应该处于立即寻址模式。
MSP430F2618系列用户指南(第4章专门介绍扩展指令 CPUx)提供了以下原理图:
基于此原理图,对于扩展指令,立即源寻址模式具有asFlag = 0b11
。 同时、asFlag=0
表示寄存器源寻址模式。
谢谢你。