gcc里面的嵌入汇编语句

gougou606 2006-04-01 12:01:17
大家好
我问问在gcc里面的嵌入汇编语句中
例如:movl %%eax,%%ebx
test %%ebx,%%ebx
其中为什么要两个%%,小弟不懂
好有就是test %%ebx,%%ebx这句话 我觉得没有什么意义啊,这样测试了ebx的值还是不变啊???
...全文
374 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
claus2001 2006-04-03
  • 打赏
  • 举报
回复
mark
tb01412 2006-04-02
  • 打赏
  • 举报
回复
在内嵌的汇编指令中可能会直接引用某些硬件寄存器,我们已经知道AT&T格式的汇编语言中,寄存器名以“%”作为前缀,为了在生成的汇编程序中保留这个“%”号,在asm语句中对硬件寄存器的引用必须用“%%”作为寄存器名称的前缀,之所以这样做,因为在内嵌汇编时%是一种标识,而真正的汇编语法中%却是要使用物理寄存器的一种符号,这就有点类似于C语言的转义字符一样

TEST用法:
TEST AX, 1 ;测试AX的第0位. TEST CL, 10101B ;测试CL的第0、2、4位
如果TEST %%ebx,%%ebx,条件表达示就为真,关键是后面的代码,你需要把后面的代码贴出来,别人才知道它的作用之所在
  • 打赏
  • 举报
回复
这是AT&T的汇编语言的语法。AT&T嵌入式汇编就要加上两个%%了。
具体的AT&T汇编语言的语法可参考:
http://blog.csdn.net/mylxiaoyi/archive/2005/11/08/525349.aspx

test %%ebx,%%ebx是不改变%%ebx,但是会改变eflags中的ZF标志啊。


kes2000 2006-04-02
  • 打赏
  • 举报
回复
TEST 测试,每对操作数的对应数据位之间执行隐含的“与”操作,仅修改标志位,不回送结果
ebx的值应该是不变的

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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