我们知道,如果我设置%eax为输入,那么我无法将其包含到破坏寄存器列表中。所以我的问题是,修改%eax汇编代码中的值而不在破坏列表中进行任何声明是否合法?
__asm__ __volatile__("inc %0" :: "a"(num) : "%eax"); // illegal
__asm__ __volatile__("inc %0" :: "a"(num)); // Can I modify %eax?
Run Code Online (Sandbox Code Playgroud) 简而言之,我有一个带有style.xml和的多主题项目style.xml(v21)。这两个版本唯一的区别是在v21版本的每个主题中都额外增加了这两行:
<item name="android:navigationBarColor">?attr/colorPrimaryDark</item>
<item name="android:statusBarColor">?attr/colorPrimaryDark</item>
而且我不维护两个样式文件,因为它们太熟悉了,所以有什么办法可以合并这两个样式xml文件,或者使v21一个扩展style.xml,当我要进行一些修改时,我只需要与style.xml
android android-xml android-resources android-studio android-styles
我需要这样的内联汇编代码:
像这样:
__asm__ __volatile__ ("push %%eax\n\t"
// ... some operations that use ECX as a temporary
"mov %0, %%ecx\n\t"
// ... some other operation
"pop %%eax"
: : "m"(foo));
// foo is my local variable, that is to say, on stack
Run Code Online (Sandbox Code Playgroud)
反汇编编译后的代码时,编译器给出的内存地址是0xc(%esp),它是相对于 的esp,因此,由于我push之前有一个操作,这段代码将无法正常工作mov。因此,我怎么能告诉编译器我不喜欢foo相对于esp,但像-8(%ebp)相对于 ebp 的任何东西。
PS 你可能会建议我可以放在eaxClobbers 里面,但这只是一个示例代码。我不想展示我不接受此解决方案的完整原因。
一个简单的问题,我可以在just sh,not bash zsh或any else 下使用数组.
ARRAYNAME=(value1 value2 .... valueN)
上面的命令只适用于bash.是否有任何替代的sh?
我试图搜索这样的问题,但没有找到纯粹的答案.