Assembly 助教指示68000

Assembly 助教指示68000,assembly,68000,test-and-set,Assembly,68000,Test And Set,要处理M68000汇编程序中的并发性,我需要了解TAS指令是如何工作的 我并不真正关心手册中的理论描述(例如)。我最想看到的是一些示例。实际上,本说明内容不多。68k组件中的典型自旋锁代码可能如下所示: lea.l spinLock(pc),a0 getLock: tas (a0) bne.s getLock bra haveLock spinLock dc.b 0 该代码将字节的MSB设置为自旋锁,

要处理M68000汇编程序中的并发性,我需要了解TAS指令是如何工作的


我并不真正关心手册中的理论描述(例如)。我最想看到的是一些示例。

实际上,本说明内容不多。68k组件中的典型自旋锁代码可能如下所示:

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

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

实际上,该指令没有太多内容。68k组件中的典型自旋锁代码可能如下所示:

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

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

在“共享资源指令”部分描述了它的用途和使用方法。有一个锁,以自旋环为例。在“共享资源说明”一节中,介绍它的用途和使用方法。以自旋循环为例,有一个锁。每个指令都是原子wrt。中断和ISR。更有趣的是,它甚至是原子核。DMA访问和其他核心(如果有的话)正在做的事情。但是,是的,在一条指令中完成测试和设置,根据旧值设置标志,这是另一条指令所不能做的。@PeterCordes当然,每条指令都是原子的,而不是在两条指令中完成测试和设置,这显然不是原子的。顺便说一句,我不知道曾经有过多核68k。它不完全是“当然”:内存位置可以通过DMA在读写之间写入,如果它不是原子的话。但是,是的,公平的一点是,没有多插槽SMP m68k系统,所以其他访问不能来自另一个核心。有趣的是,当我在谷歌上搜索时,我发现了一句老话:“MIPS、m68k和ARM不支持SMP;后两者可能永远都不支持。”事实证明ARM还有其他计划PHmm表示,多核m68k可能在一个系统中实现。@PeterCordes在一个68k系统上,这是“当然的”(Amiga除外,Amiga的非原子性是由一个自定义芯片错误引起的)每个指令都是原子wrt。中断和ISR。更有趣的是,它甚至是原子核。DMA访问和其他核心(如果有的话)正在做的事情。但是,是的,在一条指令中完成测试和设置,根据旧值设置标志,这是另一条指令所不能做的。@PeterCordes当然,每条指令都是原子的,而不是在两条指令中完成测试和设置,这显然不是原子的。顺便说一句,我不知道曾经有过多核68k。它不完全是“当然”:内存位置可以通过DMA在读写之间写入,如果它不是原子的话。但是,是的,公平的一点是,没有多插槽SMP m68k系统,所以其他访问不能来自另一个核心。有趣的是,当我在谷歌上搜索时,我发现了一句老话:“MIPS、m68k和ARM不支持SMP;后两者可能永远都不支持。”事实证明ARM还有其他计划PHmm表示,多核m68k可能在一个系统中实现。@PeterCordes在68k系统上,这是“当然的”(Amiga除外,在Amiga中,非原子性是由自定义芯片错误引起的)