#assembly #bit-shift #arm64 #mnemonics
Вопрос:
В инструкции на ассемблере, такой как
movi v30.2S, #0x3c, msl #0x8
msl приведет к тому, что значение 0x3cff
(значение сдвинуто влево, а единицы вставлены внизу) будет перемещено к цели, но что означает MSL? Например, LSL расшифровывается как «Логический сдвиг влево».
Комментарии:
1. Волшебный сдвиг влево… хотя, возможно, это был просто «модифицированный» сдвиг влево.
2.
lsl
это сдвиг влево с нулевым заполнением младших разрядов, в то время как » msl » -сдвиг влево с одним заполнением младших разрядов. Так что «измененный сдвиг влево» звучит разумно, но я еще не нашел его прописанным в официальной документации ARM.3. На других процессорах, например на m68k, два вида сдвигов являются логическими и арифметическими. Возможно, M является математическим(al)?
4. @chexum: Для меня это звучит неправдоподобно, учитывая, что он делает. Нормальный сдвиг влево (сдвиг в нулях) умножается на 2 для чисел со знаком или без знака. Некоторые ISA, такие как x86, имеют мнемонические синонимы для арифметического и логического сдвига влево, но они используют один и тот же машинный код, потому что это одна и та же операция. РУКА действительно имеет логические и арифметические сдвиги вправо . Но этот MSL не является простой математической операцией. Это умножение на степень 2 и добавление единицы меньше, чем эта степень 2. т. е.
x * 2^n (2^n-1)
Ответ №1:
Я не уверен на 100% в этом, но, основываясь на документации capstone, это может означать «Маскирующий сдвиг».
Единственное, в чем я сомневаюсь, это то, что в нем говорится lsl
, что может означать» Logical shift lift
«, а не» Logical shift left
«, так что, может быть « Masking shift left
«?
Комментарии:
1. Это сообщение в блоге , написанное сотрудником ARM, подтверждает это имя.