加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 内部循环中的内联汇编

发布时间:2020-12-16 10:16:11 所属栏目:百科 来源:网络整理
导读:我在一个项目中大量使用内联汇编,我需要在编译时调用具有未知数量参数的函数,同时我自己管理它,有时候,在 linux中(在 Windows中我不记得有这个问题)像这样的奇怪事情发生了: 如果我有类似的东西 for(int i = 1; i = 0; i--) asm("push %0"::"m"(someArray[i
我在一个项目中大量使用内联汇编,我需要在编译时调用具有未知数量参数的函数,同时我自己管理它,有时候,在 linux中(在 Windows中我不记得有这个问题)像这样的奇怪事情发生了:

如果我有类似的东西

for(int i = 1; i >= 0; i--)
   asm("push %0"::"m"(someArray[i]));

有用.

如果我有

for(int i = this->someVar; i >= 0; i--)
   asm("push %0"::"m"(someArray[i]));

并且我保证我的生活中someVar保持值1它会引发分段错误.

如果我有的话

int x = 1;
for(int i = x; i >= 0; i--)
   asm("push %0"::"m"(someArray[i]));

它有效但是

int x = this->someVar;
for(int i = x; i >= 0; i--)
    asm("push %0"::"m"(someArray[i]));

才不是.

而且,也奇怪的是,我可以说,虽然在某些功能中我在其他人中没有遇到问题,但都在同一个对象中.

如果有人能指出一些可以解决问题的信息,我将不胜感激.

请注意,我必须在for循环中推送参数,以避免它不是一个选项.

我也尝试使用内联汇编词“volatile”但没有改变.

解决方法

我无法理解问题是什么,但尝试使用清晰的asm代码编写代码

asm{
   loop1:
     mov ax,this->var
     ...
     dec ax
     cmp ax,0
     je exit
     jmp loop1
}

出口:

同时尝试将“var”值设为静态,也可以帮助它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读