小编Asy*_*ode的帖子

我可以修改 gcc 内联汇编中的输入操作数吗

我们知道,如果我设置%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)

c gcc inline-assembly

4
推荐指数
1
解决办法
1690
查看次数

Android 主题样式文件合并

简而言之,我有一个带有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

3
推荐指数
1
解决办法
1946
查看次数

带堆栈操作的 GCC 内联汇编

我需要这样的内联汇编代码:

  • 我在组件内部有一对(所以,它是平衡的)推/弹出操作
  • 我在内存中也有一个变量(所以,不是注册)作为输入

像这样:

__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 里面,但这只是一个示例代码。我不想展示我不接受此解决方案的完整原因。

x86 assembly gcc inline-assembly

2
推荐指数
1
解决办法
2322
查看次数

sh shell下的数组(不是bash)

一个简单的问题,我可以在just sh,not bash zsh或any else 下使用数组.

ARRAYNAME=(value1 value2 .... valueN)
上面的命令只适用于bash.是否有任何替代sh
我试图搜索这样的问题,但没有找到纯粹的答案.

linux shell

1
推荐指数
1
解决办法
96
查看次数