内嵌汇编%0,%1是什么
使⽤内嵌汇编,要先编写汇编指令模板,然后将C语⾔表达式与指令的操作数相关联,并告诉GCC对这些操作有哪些限制条件。例如在下⾯的汇编语句:
朴有天为主谋__asm__ __violate__
日本歌舞伎世家小少爷("movl %1,%0" : "=r" (result) : "m" (input));
何超贤“movl %1,%0”是指令模板;“%0”和“%1”代表指令的操作数,称为占位符,内嵌汇编靠它们将C语⾔表达式与指令操作数相对应。
指令模板后⾯⽤⼩括号括起来的是C语⾔表达式,本例中只有两个:“result”和“input”,他们按照出现的顺序分别与指令操作
数“%0”,“%1,”对应;注意对应顺序:第⼀个C表达式对应“%0”;第⼆个表达式对应“%1”,依次类推,操作数⾄多有10个,分别⽤“%0”,“%1”….“%9,”表⽰。
惠若琪生活照在每个操作数前⾯有⼀个⽤引号括起来的字符串,字符串的内容是对该操作数的限制或者说要求。
故事谜语及答案“result”前⾯的限制字符串是“=r”,其中“=”表⽰“result”是输出操作数,“r”表⽰需要将“result”与某个通⽤寄存器相关联,先将操作数的值读⼊寄存器,然后在指令中使⽤相应寄存器,⽽不是“result”本⾝,当然指令执⾏完后需要将寄存器中的值存⼊变
量“result”,从表⾯上看好像是指令直接对“result”进⾏操作,实际上GCC做了隐式处理,这样我们可以少写⼀些指令。
“input”前⾯的“r”表⽰该表达式需要先放⼊某个寄存器,然后在指令中使⽤该寄存器参加运算。
清明祭奠先烈寄语
发布评论