assembly - TAS 指令 68000
问题描述
要在 M68000 汇编程序中处理并发,我需要了解 TAS 指令的工作原理。
我并不真正关心从手册中可以看到的理论描述(例如http://68k.hax.com/TAS)。最重要的是,我想看到一些例子。
解决方案
实际上,这条指令并没有太多内容。68k 汇编中的一段典型自旋锁代码可能如下所示:
lea.l spinLock(pc),a0
getLock:
tas (a0)
bne.s getLock
bra haveLock
spinLock
dc.b 0
代码将字节的 MSB 设置为spinLock
,然后循环直到设置零标志(告诉您该位之前未设置,即没有其他代码已经获得锁定)。重要的是 TAS 指令是原子的,也就是说,它不能在位测试和集合之间被其他代码(例如 ISR)中断。
推荐阅读
- vue.js - 在 Nuxt/Vue 中删除事件监听器
- python - sphinx 警告:自动摘要:找不到类方法的存根文件。检查您的 autosummary_generate 设置
- json - 如何允许用户使用 Amadeus Hotel API 搜索目的地城市?
- javascript - 使用 Cypress 测试 Stripe 结账
- python - python:在FOR循环中连接多个熊猫字符串
- python - 有没有办法检查python中两个完整句子之间的相似性?
- asp.net-core - 如何绕过或暂时禁用 ViewModel 中的一些必填(必填)字段?
- android - 约束布局中的图像看起来好像我没有设置约束但我做了
- tensorflow - Keras:空间金字塔池不起作用,训练中的问题
- android - 工具栏未使用 RecyclerView 固定在 CollapsingToolbarLayout 中