首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >x86-64装配测试- jle

x86-64装配测试- jle
EN

Stack Overflow用户
提问于 2013-07-01 18:19:12
回答 1查看 11.2K关注 0票数 10

这是:

代码语言:javascript
复制
testl   %esi, %esi
jle .L3
movl    %esi, %eax

如果testl执行逻辑操作,而在esi上,结果不能减少,只能等于,如果esi为0。以这种方式无法联系到movl。这是真的,否则我会错过一些东西。

第二步:

代码语言:javascript
复制
f1:
    pushq   %rbp
    movq    %rsp, %rbp
    testl   %esi, %esi
    jle .L3
    movl    %esi, %eax
.L2:
    incb    (%rdi)
    incq    %rdi
    decq    %rax
    jne .L2
.L3:
    popq    %rbp
    ret

在假设的C翻译中,如果.L3pop组成,那么ret和分支发生时,就可以确定函数返回的值了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-01 18:32:33

“小于或等于”定义为:ZF=1 or SF != OF

TEST指令基于操作数之间的逻辑AND设置ZFSF,并清除OF

因此,实际上,您的结果是条件ZF or SF,意思是“小于或等于零”(即,如果在本例中为(signed int)esi <= 0,则跳转)。

编辑:对于问题的第二部分,它看起来像是在做一些事情:

代码语言:javascript
复制
void f1(char *c, int len)
{
    if (len > 0) {
        for (i = len; i != 0; i--) {
            (*c)++;
            c++;   
        }
    }
} 
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17411048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档