看看AVR指令集,2010年增加了四个指令
LAC load and clear
LAS load and set
LAT load and toggle
XCH load and exchange这是否意味着Rd和( Z )得到了相同的值,还是Rd得到了Z指向的预修改的值?
发布于 2012-01-25 14:06:40
这些芯片可能不在当前(最初的问题)芯片中,但它们都有一个共同的主题--原子内存操作。它们的目的通常是用于线程之间的同步,它们在指令集级别上的包含可能表明Atmel计划推出一种多核AVR芯片。因为它们现在被指定了,所以工具供应商已经可以将它们添加到汇编程序中了,但是在芯片得到指令之前,它们不会对此做什么。(编辑:事实证明,另一个核心是USB外围设备,而不是CPU。感谢avakar提供的信息。)
我从Atmel AVR 8位指令集手册上读到的行为
LAC -加载和清除,将内存内容*Z加载到寄存器Rd中,同时清除在Rd中设置的*Z中的位。
LAS加载和设置同时在寄存器中设置的存储器位置中设置位,并用存储器位置的先前内容加载寄存器。例如,对于单比特互斥非常有用。
LAT - Load和Toggle;和LAS一样,但它使用的不是按位的或,而是使用按位的xor,这样就可以切换位。
;只是交换内存和注册内容。
它们都是RAM访问指令(07/2014引用状态,它们需要两个周期),它们将操作组合在一起,这样它们还可以使代码比当前更快地需要RAM。
发布于 2017-01-20 20:58:22
小但重要的细节要强调:当Z指向“真正的”SRAM时,LAS、LAC和LAT指令可以工作。这不是(内存映射)寄存器等等。因此,实际上,这些寄存器对于您自己的(OS)数据或XMega USB模块都是有用的,没有其他外设和模块。
这是一个遗憾(例如,操作PMIC.CTRL标志非常方便),但它真的不起作用。测试过了。看起来LAS、LAC和LAT在应用于内存映射寄存器时具有与XCH ( Rd和(Z)之间的交换,但没有一点旋转)相同的效果。
https://stackoverflow.com/questions/8901275
复制相似问题