Что это делает в сборке - PullRequest
       41

Что это делает в сборке

1 голос
/ 18 января 2012

Мой учитель хочет, чтобы у нас было общее представление о сборке, потому что в будущем это может быть полезно.Я в порядке с этим, но мой колледж предоставляет нулевую документацию по этому вопросу, за исключением 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 studio 5 и смотрю на вкладку «Процессор».Я не могу найти какую-либо связь между значениями в 'varclist' и шестнадцатеричными значениями, которые показывают регистры.Как мне на это смотреть?

Я бы ожидал, что регистр Z будет содержать 0x0100, так как я представляю, что «старший значащий» бит - первый объявленный, а наименее значимый - последний объявленный.Я вижу 0x0070, однако.Я не уверен, что делает сдвиг.

1 Ответ

2 голосов
/ 18 января 2012

Чтобы ответить на ваш вопрос о сдвиге, он сдвигает все биты на один влево, добавляя ноль в качестве первого бита. Другими словами, он умножает на 2 высокое (соответственно низкое) значение переменной varclist.

varclist здесь в вашей программе - адрес массива байтов [0x01, 0x02, ... 0x00] в памяти => varclist - указатель на первый байт этого массива. Чтобы получить исходный адрес, нам просто нужно разделить на 2 (обратная операция умножения), и мы получим

0x0070 >> 1 = 0000 0000 0111 0000 >> 1 = 0000 0000 0011 1000 = 0x0038

Таким образом, адрес varclist был 0x0038. Я не знаю, как вы думали, что это 0x0100, но я надеюсь, что теперь вы понимаете код.

Я думаю, что этот адрес умножается на 2, потому что адреса в пространстве памяти программы выражаются в смещении слова, и в этом случае вам нужно умножить на 2, чтобы получить адрес в байтовом смещении. Позже вы можете загрузить этот байт (первый байт вашего массива) в r0 благодаря инструкции по сборке LPM.

Я бы рекомендовал вам прочитать главу 5.2 этого pdf и, возможно, другие главы. Руководство пользователя AVR Assembler также, вероятно, хорошая ставка.

...