作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
尝试理解一些汇编语言,但我不确定我是否正确理解它
movl 8(%ebp),%eax // assign %eax to a variable, say var
testl %eax,%eax // test if var is > 0 or not. if var is > 0, jump to .L3
jge .L3
addl $15,%eax // add 15 to var
.L3:
sarl $4,%eax // shift var 4 to the right , which is the same as multiplying var by 16
根据上述理解,我编写了以下代码
int function(int x){
int var = x;
if(var>0) {
ret = ret * 16;
}
ret = ret + 15;
return ret;
}
但是,我的汇编代码如下所示
movl 8(%ebp), %ebp
movl %eax. %edx
sall $4, %edx
test1 %eax, %eax
cmovg %edx, %eax
addl $15, %eax
我是否在某个地方误解了原始汇编代码?
编辑:是否可能涉及循环?
最佳答案
请注意,即使在添加之后,代码也会继续进行移位,并且 jge
还包括相同的情况。因此,代码可能看起来更像这样:
int function(int x) {
int ret = x;
if (ret >= 0) goto skip_add;
ret = ret + 15;
skip_add:
ret = ret / 16;
return ret;
}
或者,为了避免goto
,请反转条件:
int function(int x) {
int ret = x;
if(ret < 0) {
ret = ret + 15;
}
ret = ret / 16;
return ret;
}
PS:右移是除法,左移是乘法。
关于c - 理解汇编语言中的 teSTL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22154872/
尝试理解一些汇编语言,但我不确定我是否正确理解它 movl 8(%ebp),%eax // assign %eax to a variable, say var testl %eax,%eax //
我正在尝试理解一些汇编。 程序集如下,我对teSTL行感兴趣: 000319df 8b4508 movl 0x08(%ebp), %eax 000319e2 8b4004
我在 github 上有一个 (JavaScript) 存储库,我想为其设置一个测试工具。 似乎“磁带”和“测试”应该做我想做的事(带有漂亮 github 徽章的最小轻量级解决方案),除非有人有替代解
我正在尝试在 https://ci.testling.com/ 上运行我的 Karma 测试,这可能吗? 我认为使用 TAP ( https://www.npmjs.org/package/karma
我是一名优秀的程序员,十分优秀!