LINUX.ORG.RU

Ассемблер POWERPC

 


0

3

Уважаемые специалисты. Прошу помочь мне с пониманием. Есть фрагмент кода операционной системы на POWERPC. Этот код сравнивает имя файла. Перед его вызовом в регистры r3 и r4 задают два адреса где находятся названия файлов которые надо сравнить, в регистр r5 длина имени файла. По окончании результат выводится в регистр r3. 0 - успешно, 1 - не успешно Работа цикла в принципе понятна. Идет сравнение символов по очереди, с каждым шагом вычитается единица из регистра r5. На понятна как раз ветка когда сравнение символа прошло не удачно. В цикле сравнение велось в промежуточных регистрах r6 и r7. Когда сравление не удачно, условный переход перебрасывает на адрес 1026CF88 где командой clrlwi сравниваемые перед этим байты перебрасываются из регистров r6 и r7 в регистры r11 и r12 и они снова сравниваются. Подскажите пожалуйста, если перед этим, когда сравнивались r6 и r7 сравнение было не удачным, разве может быть ситуация когда второй раз сравнивая их в регистрах r11 и r12 оно будет удачным и программа перейдет по ветке которую я нарисовал красным?

https://yadi.sk/i/RSfO1NokypZE1g

Это фрагмент кода

Перемещено alpha из linux-org-ru

Вроде, clrlwi даёт обнуление знакового бита, повторное сравнение — чтобы сравнить символы как беззнаковые байты.

mky ★★★★★
()

и ещё

beq ADDRESS

перейти к адресу ADDRESS, если регистры, которые перед этим сравнивали, равны

bne, blt, bgt, ble, bge

все эти команды имеют такой же вид, только проверяют на неравенство, меньше, больше, меньше или равно и больше или равно соответственно

https://www.ibm.com/developerworks/ru/library/l-powasm1/index.html

superuser ★★★★★
()
Последнее исправление: superuser (всего исправлений: 1)

Подскажите пожалуйста, если перед этим, когда сравнивались r6 и r7 сравнение было не удачным, разве может быть ситуация когда второй раз сравнивая их в регистрах r11 и r12 оно будет удачным и программа перейдет по ветке которую я нарисовал красным?

Это два разных сравнения, равно и больше-или-равно. Функция делает примерно вот это, только ни один из компиляторов не делает странных и бессмысленных на мой взгляд преобразований чисел:

https://gcc.godbolt.org/z/376a4d

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