一段嵌入C++的汇编,看不懂,能给说说吗?

danmao 2003-03-26 09:57:35
asm volatile ("lock; xchg %0,%1" : "=r" (val), "=m" (*ptr) : "m" (*ptr) , "0" (val) );

具体每个表达式的意思说说。
...全文
40 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
shw014 2003-03-27
  • 打赏
  • 举报
回复
http://pagoda-ooos.51.net/os_book/prepare/preparing-asm_4.htm


%0 表示输出段中的第一个 "=r" (val)
%1 表示输出段中的第二个 "=m" (*ptr)
%2 表示输入段中的第一个 "m" (*ptr)
%3 表示输入段中的第二个 "0" (val)

"0" 表示和第0个操作表达式使用相同的寄存器/内存,即 "=r" (val) ,也就是 %0
danmao 2003-03-26
  • 打赏
  • 举报
回复
volatile是C++的关键字,关键是后面的("lock; xchg %0,%1" : "=r" (val), "=m" (*ptr) : "m" (*ptr) , "0" (val) )
Tasehouny 2003-03-26
  • 打赏
  • 举报
回复
volatile 也许还是个宏?
danmao 2003-03-26
  • 打赏
  • 举报
回复
不好意思全部一个宏定义:
#define EXCHANGE(ptr,val) \
{ \
asm volatile ("lock; xchg %0,%1" : "=r" (val), "=m" (*ptr) : "m" (*ptr) , "0" (val) ); \
}

哪位能说说呀?
danmao 2003-03-26
  • 打赏
  • 举报
回复
问题在http://expert.csdn.net/Expert/topic/1577/1577188.xml?temp=.7383081 解决
这边就当做散分好了。
danmao 2003-03-26
  • 打赏
  • 举报
回复
asm ---expressing asm language
volatile----telling complier not to optimize my asm coding
lock-------asm instruction, expressing synchronous operation
xchg-------asm insturction, expressing to exchange the values in *ptr and val varible
%0---------expressing *ptr variable
%1---------expressing val variable
"r"(val)--------expressing to input val variable into common register in system
"m"(*ptr)------expressing that the data pointed by the pointer of ptr varable are stored in memory
"=r"(val) and "=m"(*ptr)----expressing that the data exchanged will be store val and *ptr variable ,
"m" expresses to use memory to store the data of *ptr variable
"r" expresssed to use common register to store the data of val variable
以上是汇编板块的回答,还有一些搞不清楚的如下:
1、
%0---------expressing *ptr variable
%1---------expressing val variable
传入的是ptr,%0为什么不表示ptr

2、"0" (val)什么意思?
3、这个语法("asm statements":spec1:spec2)各部分有什么要求?
shw014 2003-03-26
  • 打赏
  • 举报
回复
http://www.5xsoft.com/data/200105/1517530601.htm

xchg 只是交换 val 和 *ptr 的值
lock 表明这条指令不能被打断

"lock; xchg %0,%1" 指令
"=r" (val), "=m" (*ptr) 输出字段
"m" (*ptr) , "0" (val) 输入字段(应该没用)
icansaymyabc 2003-03-26
  • 打赏
  • 举报
回复
编译都通不过还有什么意思?
danmao 2003-03-26
  • 打赏
  • 举报
回复
看了, mostneed(往↓看) 谢谢。
但是不是讲汇编这一段,讲的是volatile的作用。我希望知道这段汇编怎么理解。
mostneed 2003-03-26
  • 打赏
  • 举报
回复
我也不太清楚,记得有一篇文章有类似信息。你看看:

http://www.programmersheaven.com/articles/pathak/article1.htm

2,641

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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