关于sbbl的问题

wyfwx 2011-08-15 03:32:45
static inline int test_and_set_bit(int nr, volatile unsigned long * addr)
{
int oldbit;

__asm__ __volatile__( LOCK_PREFIX
"btsl %2,%1\n\tsbbl %0,%0"
:"=r" (oldbit),"=m" (ADDR)
:"Ir" (nr) : "memory");
return oldbit;
}

若btsl %2,%1使CF标志为1,那么sbbl %0,%0让oldbit等于 -1 吗?
sbbl是怎么工作的,请各位大虾指点下!!!
...全文
228 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zara 2011-08-15
  • 打赏
  • 举报
回复
从功能上来说,如果 sbbl 指令之前 cf=1 的话,sbbl oldbit, oldbit 指令后 oldbit = -1
wyfwx 2011-08-15
  • 打赏
  • 举报
回复
实际上我不清楚的是sbbl oldbit,oldbit 当需要借位的时候是 1 还是 0xFFFFFFFF
wyfwx 2011-08-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zara 的回复:]
指令功能上就是这样的,没有更详细了。具体到你这里,不熟悉你这个格式的语法,不了解其中的 %0/%1/%2 是什么意思了。
[/Quote]

这是AT&T汇编格式的, %0是变量oldbit/%1是函数参数addr/%2是函数参数nr
zara 2011-08-15
  • 打赏
  • 举报
回复
指令功能上就是这样的,没有更详细了。具体到你这里,不熟悉你这个格式的语法,不了解其中的 %0/%1/%2 是什么意思了。
wyfwx 2011-08-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zara 的回复:]
是这个意思。sbb 和 sub 比较,就是在 sub 的基础之上再减去 原 cf 值。
[/Quote]

若CF为1的话,sbbl %0,%0是让oldbit=oldbit-oldbit-CF是等于 -1 吗?我的汇编不好,能详细说下吗
zara 2011-08-15
  • 打赏
  • 举报
回复
是这个意思。sbb 和 sub 比较,就是在 sub 的基础之上再减去 原 cf 值。

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧