查看 AVR 指令集,2010 年增加了 4 条指令
LAC load and clear
LAS load and set
LAT load and toggle
XCH load and exchange
有谁知道什么芯片有这些说明
哪些工具支持这些说明
有关他们做什么的更多信息
(Z) <- Rd v (Z), Rd <- (Z)
这是否意味着 Rd 和 (Z) 获得相同的值,或者 Rd 获得 Z 所指向的内容的预修改值?
这些可能不在当前(如最初的问题)芯片中,但都有一个共同的主题 - 原子内存操作。它们的目的通常是用于线程之间的同步,并且它们包含在指令集级别可能表明 Atmel 正计划推出多核 AVR 芯片。由于现在已经指定了它们,因此工具供应商已经可以将它们添加到汇编器中,但是在芯片有指令之前,他们不会做太多的事情。(编辑:事实证明,另一个核心是 USB 外围设备,而不是 CPU。感谢 avakar 提供的信息。)
我从Atmel AVR 8-bit Instruction Set Manual中读到的行为:
LAC - 加载和清除,将内存内容 *Z 加载到寄存器 Rd 中,同时清除 *Z 中设置在 Rd 中的位。
LAS - 加载和设置同时设置在寄存器中设置的内存位置中的位,并使用内存位置的先前内容加载寄存器。例如,对于单位互斥锁非常有用。
LAT - 加载和切换;与 LAS 类似,但不是按位或,而是使用按位异或,从而切换位。
XCH——交易所;简单地交换内存和寄存器内容。
它们都是 RAM 访问指令(07/2014 参考状态它们需要两个周期),它们结合了操作,因此它们还可以使需要 RAM 的代码比现在更快。
需要强调的小而重要的细节:LAS、LAC 和 LAT 指令仅在 Z 指向“真实”SRAM 时起作用。那不是(内存映射的)寄存器等。因此,事实上,这些对于您自己的(OS)数据或 XMega USB 模块都很有用,没有其他外围设备和模块。
很遗憾(例如,它对于操作 PMIC.CTRL 标志非常方便),但它确实不起作用。经测试。当应用于内存映射寄存器时,看起来 LAS、LAC 和 LAT 与 XCH 具有相同的效果(Rd 和 (Z) 之间的交换,但没有位旋转)。