LINUX.ORG.RU

64-битные регистры задействуются как 32-битные

 , ,


0

2

Если писать код для aarch64 в виде ассемблерных вставок, то при отладке в GDB Dashboard видно, что запись mov x5, #100 задействует только младшие 32 бита, а в оставшихся старших 32 битах остаются прежние значения или значения соседних регистров, либо их прошлые значения

Попробую пояснить суть проблемы иначе. Регистр w5 это 32 битный, x5 это 64 битный. Так вот ассемблерная вставка задействует именно регистры x а значит если я записал туда 5, значит весь регистр должен быть равен 5. У меня же 5 попадет только в младшие 32 бита

В результате этих ложных значений не работают такие инструкции как cmp и прочие условные. Я предполагаю что отладчик GDB не просто так показывает такие значения в регистрах

Инструкции типа sub add и прочие - работают как надо. Но полагаю из за того что в старших 32 битах регистров x лежит какая-то хрень, то именно поэтому не работает нормально инструкция cmp и условные переходы b, точнее они срабатывают, но с одним и тем же результатом, потому что в старших 32 битах регистра неизменно торчит какая то каша

Почему mov x1, #100 не запишет всё биты целевого регистра? Нашел что значения из инструкции берутся от 0 до 4095, но неужели остальные старшие не обнуляются? А как тогда всё обнулить? sub x1, x1, x1???

Прошу помощи, чтобы понять суть проблемы. Могу уточнить и вечером показать примеры, если нужно

★★★★★

Последнее исправление: I-Love-Microsoft (всего исправлений: 1)

Ответ на: комментарий от anonymous

Это да, вечером проверю. Но меня удивляет что mov x3, #0 на запишет нули в старшие разряды. Точнее либо запишет, но следующие же шаги в отладчике испортят старшие 32 бита. Это странно, может отладчик портит? Но и без отладчика такая же хрень

Я точно что-то простого не понимаю, ведь элементарные же действия типа cmp. Оно должно молча работать и всё

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

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

anonymous
()
Ответ на: комментарий от I-Love-Microsoft

что-то меня смущает, как это прилопатить к mov x0

вроде указан 64битный регистр, а что там за данные глубоко похрен

anonymous
()
4 апреля 2021 г.

Стоит показать видео обслуге, как силовики уже ищут и находют, всё бледь сливается: https://www.youtube.com/watch?v=FejEOcjhL-E

Обслуга, ждите для детей Окрестино. Уверен съватся не смогут ни они, ни ты. Скринь.

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