LINUX.ORG.RU

Nasm, условия перехода

 ,


0

1

Доброго времени суток. встал на ровном месте и не могу разобраться в условиях перехода. есть такой код, его смысл найти первое значение большего «е».

foo:                ; begin = rdi, end = rsi, e = rdx
section .text
    pop rbp
    mov rbp, rsp
    sub rsp, 8
    mov [rbp-8], rdi
.again:
    cmp rdx, [rdi]
    jl .yes
    add rdi, 4
    cmp rdi, rsi
    jl .again
    cmp rdi, rsi
    je .no
.yes:
    sub rdi, [rbp-8]
    mov rax, rdi
    jmp .exit
.no:
    mov eax, -1
.exit:
    push rbp
    ret
его эквивалент на С:
int foo(int *begin, int *end, int e)
{
    int *start = begin;
    while(begin < end)
    {
        if(e < *begin)
            break;
        begin++;
    }
    return (begin == end) ? -1 : begin - start;
}
У меня проблема в условии перехода. Как я понимаю jl, если rdx меньше значения по адресу rdi перейти на метку .yes. Но происходит совершенно противоположное. Тут вся программа. подскажите, пожалуйста, в чем моя ошибка.

разобрался в той строчке я сравниваю 8 байт(регистр) с 8 байтами по адресу (хотя думал что с 4мя). поэтому каша и выходила.

SmilePlz
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.