0
Может ли кто-нибудь объяснить мне, что делает следующий фрагмент кода сборки? Я не совсем уверен, что делает последняя строка.Объяснение для сборки
.def main = r16
.equ O = 5
.equ P = 6
ldi main, 0
ldi r16, (1<<O) | (1<<P)
Im особенно интересно, что на самом деле делает последняя строка. Загружает ли регистр 16 значение двух логических shifs слева после инструкции OR?
Спасибо большое.
Спасибо за ваш ответ, но им больше интересно, что он на самом деле делает, как я сказал в своем открытии. Мне просто интересно, что такое «<<» и «|» означает в сборе. – Brainscrewer
<< и | не являются языком ассемблера, они больше относятся к языку C. «язык ассемблера» здесь ldi r16,96. Как определение в C................................................... Таким образом, O - это определение для числа 5, 1 << 5 означает 1 сдвинутый левый 5 бит или 0x20. P определяется как 6, 1 << 6 означает 1 сдвинутый левый 6 или 0x40. | означает или два значения, поэтому 0x20 | 0x40 = 0x60, что равно 96 десятичным. –
a определяет часть языка C, да. но на ассемблере директивы специфичны для ассемблера, программа, которая преобразует файл языка ассемблера в машинный код. И часто бывает так, что разные ассемблеры для одного и того же процессора не используют все те же директивы. и когда вы делаете что-то подобное с C-кодом, иногда сам ассемблер не может его обрабатывать (например, gnu-ассемблер), вам иногда приходится предварительно обрабатывать его с помощью компилятора C, а затем передать его ассемблеру. –