Мой учитель хочет, чтобы у нас было общее понимание сборки, потому что позже по дороге это может быть полезно. Я в порядке с этим, но мой колледж предоставляет нулевую документацию по этому вопросу, за исключением 4 небольших примеров. Я пытаюсь выяснить, что происходит в этом одном:Что это делает в сборке
.DEVICE ATmega32
.CSEG
main:
ldi ZL,low(varclist<<1)
ldi ZH,high(varclist<<1)
.CSEG
varclist:
.db 1, 2
.db 3, 4
.db 5, 6
.db 7, 8
.db 9, 0
Я работаю в AVR студии 5, и, глядя на вкладке «процессор». Я не могу найти никакой связи между значениями в «varclist» и шестнадцатеричными значениями, отображаемыми в регистре. Как я могу смотреть на это?
Я бы ожидал, что регистр Z будет содержать 0x0100, так как я представляю, что бит «наиболее значимого» будет первым, объявленным, и наименее значимым последним объявленным. Однако я вижу 0x0070. Однако я не уверен, что происходит.
Как и для вашей домашней работы, я думаю, вы должны добавить этот тег. По той же причине, рассказывая вам, какой именно код, вероятно, не лучший способ помочь вам. Можете ли вы сказать, что, по вашему мнению, должно присутствовать в ваших регистрах и какова ценность, которую вы получаете? Как только вы это сделаете, мы могли бы объяснить, что было не так в ваших рассуждениях :) –
Это справедливо, я не ищу ответа, я бы хотел понять. Я добавлю дополнительную информацию. – Lg102
Я рекомендую сборку, а затем разборку кода. Затем ознакомьтесь с инструкцией по набору инструкций avr для получения информации о каждой инструкции. Вы должны иметь возможность выяснить между документом набора инструкций avr и главой core/cpu в файле данных atmega32/manual о том, что такое регистр z, как он сопоставляется с gprs и что инструкция на самом деле выполняет как закодированная. оттуда возвращаются к ассемблеру –