Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Зеркальное отображение массива.

57K
30 марта 2011 года
Nosaer
18 / / 25.08.2010
Здравстуйте.
Необходимо зеркально отобразить массив из 256 байт. т.е. первый элемент меняется местами с последним, а второй с предпоследним и.т.д.
В других языках программирования это не составило бы особых проблем. Там как никак есть инструкции while, if, for. Но тут я попал в тупик, подскажите пожалуйста как проще это реализовать!?
316
30 марта 2011 года
Alm3n
889 / / 29.05.2009
тем же while,if(если masm), не?а так, смотри в сторону loop,jcxz,cmp инструкциий.
57K
31 марта 2011 года
Nosaer
18 / / 25.08.2010
Это для прошивания в микроконтроллер. Боюсь что он эти команды не особо поддерживает.
П.С. Сорри что забыл сразу об этом упомянуть!
260
31 марта 2011 года
Ramon
1.1K / / 16.08.2003
Цитата: Nosaer
Это для прошивания в микроконтроллер. Боюсь что он эти команды не особо поддерживает.
П.С. Сорри что забыл сразу об этом упомянуть!


А больше вы ничего "упомянуть" не забыли, целевую платформу например?...

57K
31 марта 2011 года
Nosaer
18 / / 25.08.2010
Если вы имеете ввиду тип микроктонтроллера, то это особой разницы не имеет. Как нибудь да разберусь. А так Motorolla
260
31 марта 2011 года
Ramon
1.1K / / 16.08.2003
Цитата: Nosaer
Если вы имеете ввиду тип микроктонтроллера, то это особой разницы не имеет. Как нибудь да разберусь. А так Motorolla


Тогда, разбирайтесь.

57K
01 апреля 2011 года
Nosaer
18 / / 25.08.2010
Сейчас посидел сам по разбирался, в итоге накидал вот такой вот код

Код:
RomStart     EQU  $9000    
RAMStart     EQU  $0040
VectorStart   EQU  $FFFE

        ORG    RomStart
main:     lda #40
    sta $110    
    lda #29    
    sta $111        
    lda #45    
    sta $112        
    lda #3D    
    sta $113        
    lda #19    
    sta $114
              mov #5,$50    
    ldhx #$110    
m1:      lda ,x
          sta $20,X    
          aix #1        
          dec $50
          bne m1
                       
mend:    jmp mend    
            ORG VectorStart
              DW main
              End

Здесь тупо копируется массив данных. Из одного места в ОЗУ в другое.
Если следлвать моей идеи, то для реализации того что нужно, мне необходимо с каждым циклом уменьшать значение $20 на 2 в команде sta $20,X

то есть должно получится, что то вроде этого:
$110+$20 = $130
$111+$18 = $129
$112+$16 = $128
$113+$14 = $127

А как это сделать я не пойму... Подскажите пожалуйста.
244
01 апреля 2011 года
UAS
2.0K / / 19.07.2006
Я, конечно, далеко не низкоуровневый программист (писал мелочи по универу), но что мешает сделать цикл (по i) от 0 до 128, после чего менять местами байты array <-> array[255-i].
Я так думаю, что обыденные в 8086 jmp, cmp, jz и mov и косвенную адресацию ваш ассемблер поддерживает (имеет соотв.аналоги)

P.S.: ещё раз повторюзь, что не программирую так-то на асме, потому могу ошибаться в корректности реализации.
57K
01 апреля 2011 года
Nosaer
18 / / 25.08.2010
Я сам больше склоняюсь к Python, но по воле учебы столкнулся с этим чудом.
Я пролистал большое количество книг, и ничего похожего на array <-> array[255-i] так и не встретил.
По сути задача вроде бы из простых, отнимать в кажом цикле из 20 два. Но толи я с синтаксисом где то промахиваюсь, либо еще что.
252
01 апреля 2011 года
koderAlex
1.4K / / 07.09.2005
если бы вы сказали какой именно проц , а ещё лучше дали ссылку на описалово , то мы могли вам помочь . )
57K
01 апреля 2011 года
Nosaer
18 / / 25.08.2010
МИКРОКОНТРОЛЛЕРы СЕМЕЙСТВА 68HC08/908 ФИРМЫ МOTOROLA

Вот методичка по лабам, там описание архитектуры, и основные команды.
Но написана не особо понятным мне языком все это.. =)
http://zalil.ru/30779700
252
02 апреля 2011 года
koderAlex
1.4K / / 07.09.2005
у вас есть два индексных регистра - HX и SP . можно использовать пару H и X по отдельности , каждый из которых будет работать со своей половиной массива .
если использовать H и X , то счётчик циклов не нужен . достаточно проверять после каждой итерации что H > X и если это не верно , то конец цикла .
57K
02 апреля 2011 года
Nosaer
18 / / 25.08.2010
Не совсем понял, можно более подробнее "на пальцах"!?
252
02 апреля 2011 года
koderAlex
1.4K / / 07.09.2005
LDX $xx ; загружаем начальный адрес массива
LDH $xx ; загружаем конечный адрес массива
L:
LDA X ;загружаем в А значение из начала массива
MOV H,X ; копируем значение из [X] в [H]
STA H ;загружаем из А значение в конец массива
INC X ;+1 в Х
DEC H ;-1 в Н
CMP X,H ;сравниваем Х и Н (не уверен что будет работать в таком виде , но думаю идея ясна)
BHI L ;если Х всё ещё больше Н , то цикл по метке L
57K
02 апреля 2011 года
Nosaer
18 / / 25.08.2010
Спасибо, идея бы замечательно сработала. Но вся проблема в том, что при программировании Motorola возможно использовать только LDA, LDX и LDHX. Про LDH я нигде ничего не видел =(
252
02 апреля 2011 года
koderAlex
1.4K / / 07.09.2005
ну используйте LDHX .
выше был код , поясняющий алгоритм . и не более того .
я же написал : "не уверен что будет работать в таком виде.."
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог