首页 > 解决方案 > TAS 指令 68000

问题描述

要在 M68000 汇编程序中处理并发,我需要了解 TAS 指令的工作原理。

我并不真正关心从手册中可以看到的理论描述(例如http://68k.hax.com/TAS)。最重要的是,我想看到一些例子。

标签: assembly68000test-and-set

解决方案


实际上,这条指令并没有太多内容。68k 汇编中的一段典型自旋锁代码可能如下所示:

        lea.l  spinLock(pc),a0
getLock:
        tas   (a0)
        bne.s getLock
        bra   haveLock
spinLock 
        dc.b  0

代码将字节的 MSB 设置为spinLock,然后循环直到设置零标志(告诉您该位之前未设置,即没有其他代码已经获得锁定)。重要的是 TAS 指令是原子的,也就是说,它不能在位测试和集合之间被其他代码(例如 ISR)中断。


推荐阅读