MC68HC11. Младший байт регистра Х

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Ответить
borN_free
Сообщения: 10
Зарегистрирован: 15 апр 2009, 01:48

Произвести обмен содержимого младшего байта регистра X с регистром А.


Микроконтроллер семейства МC68НС11

комплирую в Micro-IDE
ОС WinXP

такая задача.. ну во первых, куча вопросов конечно. все по порядку.
1)что значит младшего байта?
2)какая адресация тут?

При полном отсутствии понимания того что я делаю, я конечно попытаюсь набросать что нибудь, что бы не быть наглым , пожалуйста исправьте и помогите кто чем может

Код

org $8000
ldx #$1f00; установить регистр X (вот тут не знаю, во что установил, и надо ли ????? )
ldaa $03,х ; считать информацию (не знаю, интуитивно пишу это)

Спасибо.
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

А скольки битный там регистр A?
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Нашел. Вот тут весьма доходчивое объяснение.
http://notes.ump.edu.my/fkee/BEE4323%5F ... echnology/

индексные регистры 16-битные
ACCA и ACCB - 8-битные и составляют вдвоем ACCD - 16-битный аккумулятор.
Сложность задания заключается в том, что
1) Инструкций обмена у мотороловских микроконтроллеров никогда не было
2) индексным регистром можно оперировать только целиком, т.е. нельзя обратиться к его младшей или старшей половине.

Поэтому надо делать через сохранение в память.
А может через операции сдвига....

Вот еще сводная таблица всех команд http://www.netzmafia.de/skripten/mikroc ... eflist.pdf
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Дааааа, придется все делать в памяти. Операции сдвига могут только на 1 бит сдвигать. Т.е. целый байт двигать нерационально.

Код: Выделить всё

    org $8000
    ;загружаем начальные значения
    ldx #$1234
    ldaa #$56
    ;теперь надо байт $34 поменять местами с $56
    ;в этом и состоит задача, собственно
    stx $9000  ;по адресам $9000-$9001 записывается $34 и $12
    ldab $9000 ; запоминаем $34 в регистре B
    sta $9001  ;по адресу $9001 записываем $56 
              ;(получается готовое значение для X)
    ldx $9000 ; теперь X=$1256
    ;осталось как-то перекинуть B в А
    clra
    aba
    ;вот и все X=$1256, A=$34
    stop
Это не программирование :) Этот больше похоже на тетрис за 10 секунд до проигрыша :)

А, чОрт :) хорошая мыслЯ, как говорится, приходит опослЯ.
Подумайте над тем, чтобы данные запихнуть в стек, а потом снять со стека в нужном порядке. Это наверное будет рациолнальнее.
borN_free
Сообщения: 10
Зарегистрирован: 15 апр 2009, 01:48

org $8000
;загружаем начальные значения
ldx #$1234
ldaa #$56
;теперь надо байт $34 поменять местами с $56
;в этом и состоит задача, собственно
stx $9000 ;по адресам $9000-$9001 записывается $34 и $12
ldab $9000 ; запоминаем $34 в регистре B вот тут пишет $12 а не $34
sta? $9001 ;по адресу $9001 записываем $56 ТУТ НЕ ДОПИСАНА КОМАНДА вместо знака вопроса А или B ?
;(получается готовое значение для X)
ldx $9000 ; теперь X=$1256
;осталось как-то перекинуть B в А
clra
aba
;вот и все X=$1256, A=$34
stop

идея понравилась, но пока не могу сгенернуть, доделать.

тут не мотороловский, а интелевский контроллер

но огромное вам спасибо за помощь

На счет стека - я не прочь подумать, и даже есть огромное желание, но я отсутствие знания команд не дает возможности, такое обучение(
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

&quot писал(а):stx $9000 ;по адресам $9000-$9001 записывается $34 и $12
ldab $9000 ; запоминаем $34 в регистре B
вот тут пишет $12 а не $34
Странно... Значит порядок байтов в слове прямой а не обратный как чаще всего бывает. Значит все наоборот

stx $9000 ;по адресам $9000-$9001 записывается $12 и $34
ldab $9001
&quot писал(а):sta? $9001 ;по адресу $9001 записываем $56
ТУТ НЕ ДОПИСАНА КОМАНДА вместо знака вопроса А или B ?
STAA. $56 же у нас лежит в А.
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
&quot писал(а):тут не мотороловский, а интелевский контроллер
Гуглим по названию микроконтроллера и попадаем на сайт производителя - это моторола. Там лежат спецификации чипа в формате PDF. Я в бытность много чего написал на мотороловском ассемблере. (Правда процессор был 8-битный.) И LDA, LDX, STA, STX.... отпечаталось в мозгу как дважды два :)
borN_free
Сообщения: 10
Зарегистрирован: 15 апр 2009, 01:48

На счет контроллера приношу извинения

Все заработало, спасибо. Посоветуйте литературки для новичков пожалуйста. Хочется все таки самому понимать.

Спасибо.
Ответить