Не понимая этот фрагмент ARM - PullRequest
1 голос
/ 09 апреля 2020

Я работаю над декомпиляцией двоичного файла ARMv7 вручную, и я наткнулся на несколько инструкций, которые я не совсем понимаю. Это выглядит так:

VLDR        S15, [R3]
VCMPE.F32   S15, #0.0
VMRS        APSR_nzcv, FPSCR
BMI         .next

R3 до этого указывает на запись в массиве с плавающей точкой. Я понимаю, что он сравнивает этот float с 0.0F, но я не могу сказать, что еще он делает.

1 Ответ

1 голос
/ 09 апреля 2020

Если сравнение [R3] с 0.0f отрицательно, управление переходит на .next - в противном случае оно продолжается.

См. Комментарий после каждой инструкции:

VLDR        S15, [R3]           ; load [R3] to S15
VCMPE.F32   S15, #0.0           ; compare s15 with 0.0F
VMRS        APSR_nzcv, FPSCR    ; move FP flags to ARM core flags [N,Z,C,V]
BMI         .next               ; branch if result is negative i.e. N=1

См. Документацию:

...