42 сообщения в этой теме

Помогите сориентироваться с чего начать решение вопроса. Или возможно есть уже похожие написанные программы. 

Нужно для микроконтроллера семейства MCS-51 составить программу, которая выполняет логическую операцию "И" над числами 5416 и 8716.

Указанные числа необходимо предварительно записать в регистр R6 и R7 нулевого банка регистров, а результат операции разместить в регистр R7 второго банка регистров.

Составить двоичный и шестнадцатеричный код каждой команды.

Изменено пользователем Elite_Knight
ошибка

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
SDD39    144

https://www.mikroe.com/mikroc/#8051

Я сам пока изучаю Си и на компьютер уже написал несколько программ. 

Мне кажется что для мк программа выглядеть будет так.

#include <8051.h>

int main (void){
    register int r6=0x54, r7=0x87;
    r7 &= r6 ;
return (0);    
}

А микро си уже покажет коды и в ассемблере и машинных кодах.

Изменено пользователем SDD39

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
o_l_e_g    1 641
28 минут назад, Elite_Knight сказал:

с чего начать решение вопроса

Нужно было с посещения лекций!

Бери систему команд, алгоритм описан, осталось взять нужные и выстроить программу. Она займет пять-семь строк.
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
SDD39    144

Честно говоря микроси  интересненько всё делает.

Вот эту команду    r7 &= r6 ; , вместо того чтоб сделать по честному ,

вычисляет значение 4 где то в препроцессоре , А зарем перегоняер его через 27 регистр в 7.

Это у него в порядке вешей , такие фокусы?

 

1.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
musa56    169
55 минут назад, SDD39 сказал:

Это у него в порядке вешей , такие фокусы?

А что вы хотите. Вы пишете программу на "С" а компилятор пытается команды "С" выполнить используя асемблер. К программированию на асемблере это отношения не имеет. На Асемблере вы оперируете регистрами напрямую и программа использует коды Асемблера вашего процесора.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
SDD39    144
2 часа назад, musa56 сказал:

К программированию на асемблере это отношения не имеет.

 

Попробовал облегчить задачу сменив верхние  регистры , на полнофункциональные 16 и 17.

Код стал проще . Но всё равно та же песня с &= 

1.png

А  вкдь по идее , вместо  LDI  R17, 4  

Ему и надо то всего лишь прописать     AND R17 , R16 

Что не требует вообще ни каких усилий и даже высисления значения 4.

Изменено пользователем SDD39

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, o_l_e_g сказал:

Нужно было с посещения лекций!

Ждал вот такой комментарий. Можно по сути отвечать. Если есть кто-то знающийся в Ассемблере напишите как оно должно выглядеть структурно. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
SDD39    144
2 часа назад, Elite_Knight сказал:

Можно по сути отвечать.

А по сути ,ваша задача не реализуема. По скольку у этого процессора есть только два регистра . Регистр А - аккумулятор и вспомогательный регистр В. 

Цитата

Арифметико-логическое устройство (ALU) представляет собой параллельное восьмиразрядное устройство, обеспечивающее выполнение арифметических и логических операций. АЛУ состоит из:

регистров аккумулятора, регистров временного хранения TMP1 и TMP2,

ПЗУ констант,

сумматора,

дополнительного регистра (регистра В),

аккумулятора (ACC),

регистра состояния программ (PSW).

Регистр аккумулятор и регистры временного хранения - восьмиразрядные регистры, предназначенные для приема и хранения операндов на время выполнения операций над ними. Эти регистры программно не доступны.

ПЗУ констант обеспечивает выработку корректирующего кода при двоично-десятичном представлении данных, кода маски при битовых операциях и кода констант.

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

Регистр B - восьмиразрядный регистр, используемый во время операций умножения и деления. Для других инструкций он может рассматриваться как дополнительный сверхоперативный регистр.

Аккумулятор - восьмиразрядный регистр, предназначенный для приема и хранения результата, полученного при выполнении арифметико-логических операций или операций сдвига

http://www.computer-museum.ru/technlgy/proclect/mcs51/mcs_51.htm

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, солар сказал:

Могу написать.

Отлично, и все же знаний у меня не прибавится. Подскажите пожалуйста тогда с чего это все начинается. Там что-то сперва заносим в аккумулятор? Используем именно здесь команду ANL? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
SDD39    144

Я не знаю где вы физически возьмёте регистры 6 и 7 . Но выглядит так.

Значение регмстра 7 помещаете в аккумулятор .

значение регистра 6 в регистр В

Проводите операцию И между А и В 

Ну и перемещаете аккумулятор в регистр 7 .

Да в начале надо еще число 0х54 записать в аккумуятор , 

затем поместить значение в регистр 6 

то же самое со вторым числом

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
o_l_e_g    1 641
24 минуты назад, SDD39 сказал:

только два регистра

Гораздо больше.
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
SDD39    144
2 часа назад, o_l_e_g сказал:

Гораздо больше.

Разве у него ядро не Z80 го?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
o_l_e_g    1 641

У них, даже архитектура разная Фон Нейман и Гарвард.
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
SDD39    144

За то принцип работы через аккумулятор  один и тот же.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
o_l_e_g    1 641
Только что, SDD39 сказал:

через аккумулятор

Опять нет. Спокойненько пишем ANL R6,R7 
 

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


 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
SDD39    144
2 часа назад, o_l_e_g сказал:

койненько пишем ANL R6,R7 

По этой ссылке получается что можем http://www.gaw.ru/html.cgi/txt/doc/micros/mcs51/arh/mem.htm

А по этой не можем http://www.computer-museum.ru/technlgy/proclect/mcs51/mcs_51.htm

И чему верить ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
o_l_e_g    1 641
9 минут назад, SDD39 сказал:

И чему верить ?

Компилятору!
 

Сори, один операнд, всё же должен быть А.  Правильно ANL A, R7
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
SDD39    144
2 часа назад, o_l_e_g сказал:

Компилятору!

Так я же его и предлагал в самом первом посту.)))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Джентельмены, я конечно рад что вы нашли общий язык, и при этом не тяните кота за хвост -- скажите код раз все ясно!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
o_l_e_g    1 641
2 минуты назад, Elite_Knight сказал:

скажите код раз

А ключи от квартиры? :)
 

Сам то, хоть попытайся!
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
SDD39    144

Через аккумулятор надо

MOV  A  , 36H

MOV R6 , A

MOV A  , 57

ANL A , R6

MOV R7 , A

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ваша публикация должна быть проверена модератором

Гость
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...

  • Похожие публикации

    • Автор: Catana
      Определить ток через сопротивление R. 
       

    • Автор: Litregol
      Здравствуйте! 
      Помогите пожалуйста с задачей.
      Дана схема, напряжение питания известно, известны входные и выходные характеристики транзистора. Транзистор работает в линейном режиме.
      Нужно найти сопротивления на резисторах.
      (На картинке сопротивления на резисторах выставлены для галочки)



    • Автор: Vlad Zubarev
      Доброго времени суток!  Кто разбирается с Atmega128,  ассемблером и кому не жалко времени,  пожалуйста помогите. 
      Как можно корректировать скорость падения маятника (он должен постеменно набирать скорость падения и плавно замедляться к верхней точке)... Какие данные нужно менять?!  Спасибо! 
      логин маятник 2.zip

    • Гость Анна
      Автор: Гость Анна
      Здравствуйте, такое дело, нужно разработать активный полосовой фильтр второго порядка с многопетлевой обратной связью
      Все данные уже рассчитаны, теоретические графики АЧХ и ФЧХ получены, а в тине непонятно какой ОУ брать, известно, что ширина полосы пропускания ОУ должна быть более чем в 50QF^2 раз больше коэффициента передачи фильтра в полосе пропускания для всего диапазона частот входных сигналов(равен 5)
      На схеме взят рандомный усилитель






    • Автор: Akerman
      Задачи 127-132
      В цепь транзистора включенного по схеме с общим эмиттером, включено сопротивление нагрузки, которое изменяется по величине от Rк1до Rк2. Заданы: ток базы Iб и напряжение источника питания Ек. Используя выходные характеристики определить:
      - напряжение UK1 и UK2;
      - коэффициент усиления  h21э;
      - мощность на коллекторе Рк1 и Рк2.
      дано:     Iб=1мA
          Рк1=0.1 кОм
          Рк2=0.2 кОм
         Ек=40 В