Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Задача асемблер за PIC16C73
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=12677
Страница 1 от 6

Автор:  EquilibriumCST [ Нед Фев 09, 2014 10:30 pm ]
Заглавие:  Задача асемблер за PIC16C73

Здравейте,

Контролера е PIC16C73 и използваме mplap за информация.
Ето и условието на задачата

Да се състави програма на асемблер, която:
1. Да съдържа подпрограма, пресмятаща израза:
R = A.4 – B/4 + 178,
където А – еднобайтова променлива в данновата памет;
В – еднобайтова променлива в данновата памет.
2. Подпрограмата да се извика за елементите на два масива от по 12 еднобайтови числа.

Мога да предоставя и примерна задача подобна на тази.
Ако не се намери някой доброволец почитащ червения кръст може и срещу заплащане :)
Или предлагам мой труд като Java Web Developer.

Поздрави Валери

Автор:  EquilibriumCST [ Нед Фев 09, 2014 10:33 pm ]
Заглавие:  Re: Задача асемблер за PIC16C73

Май съм пуснал темата на грешно място. Моля някой с права да я премести в Микроконтролери - Програмиране раздела.

Автор:  Cekins [ Пон Фев 10, 2014 12:20 am ]
Заглавие:  Re: Задача асемблер за PIC16C73

Темата ти е най-вече за "Обяви".

А сега може би един тъп въпрос - какво ще прави тоя дядка като сметне нещата - ще започне да подскача на един крак ли, що ли ?

И накрая решението - изтегли си някъв (къв да е) компилатор за пик-чета - за съжаления на Java няма, тъй че ще трябва да се примириш с С, паскал или бейсик. Написваш си кода, компилираш го, преписваш компилираното, като махаш(или променяш) коментарите дето ги слага компилатора и си готов. Не че няма ентусиасти тука, ама едва ли някой ще седне ей сега да пише на асемблер.

И последно - питай даскала R каква трябва да е : byte, shortint, integer, longint, float, real , signed, unsigned ? Щото за пикчето има голямо значение...

Автор:  CarBeta [ Пон Фев 10, 2014 10:04 am ]
Заглавие:  Re: Задача асемблер за PIC16C73

Че тя задачата е 5 реда на асемблер :D
Даскала ти е дал най-лесния вариант за умножение и делене(четна константа). В случая резултата от умножение по 4 ти е А и два пъти RLF, a делене на 4 ти е B и два пъти RRF. Преди всяка RLF/RRF операция трябва да нулираш С, да не се намъкне в резултата. Ако резултата от умножението е повече от 8 бита се гледа DC и ти трябва още една променлива за старшите битове.

Автор:  Cekins [ Пон Фев 10, 2014 8:22 pm ]
Заглавие:  Re: Задача асемблер за PIC16C73

Да де ама R не е уточнено какво е - щото ако е байт - лесно, ама ако е някакъв интиджер - вече е друго.
За масива - гадинката има FSR тъй че и туй олеснява допълнително задачата.

Автор:  Vesko [ Пон Фев 10, 2014 8:59 pm ]
Заглавие:  Re: Задача асемблер за PIC16C73

Cekins написа:
Да де ама R не е уточнено какво е - щото ако е байт - лесно, ама ако е някакъв интиджер - вече е друго.
За масива - гадинката има FSR тъй че и туй олеснява допълнително задачата.

Другото неуточнено е в какъв размер се прави самата математика. Тя може да се прави както в инт (дефаулта за Ц за цели числа), така и в друг вид. И не е задължително резултата да съвпада с начина на смятане.

ПП:Ако не е тайна тази задача в какво учебно заведение е?

Автор:  Cekins [ Вто Фев 11, 2014 10:21 am ]
Заглавие:  Re: Задача асемблер за PIC16C73

Аз по-горе писах че не са уточнени типовете. Искат му го на асемблер написано - там май няма дефоулт.

Автор:  ike [ Вто Фев 11, 2014 10:27 am ]
Заглавие:  Re: Задача асемблер за PIC16C73

R = A.4 – B/4 + 178
се събира в int16_t значи в такъв тип трябва да е отговора.

Автор:  Vesko [ Вто Фев 11, 2014 11:03 am ]
Заглавие:  Re: Задача асемблер за PIC16C73

ike написа:
R = A.4 – B/4 + 178
се събира в int16_t значи в такъв тип трябва да е отговора.

R може да си е всякакъв тип, независимо че се събира в int16_t.

Автор:  CarBeta [ Вто Фев 11, 2014 12:39 pm ]
Заглавие:  Re: Задача асемблер за PIC16C73

Никъде не е споменато изискване за типа на R, т.е. не е нужно да си усложняваме живота с разсъждения "какво може", "какво би било...", "ако..." и т.н. В случая е важно да се напише на асемблер и резултата винаги да е верен. Уловките по-скоро са 16 битовaтa променливa за резултат и приоритета на аритметиката.

Автор:  didofen [ Вто Фев 11, 2014 12:43 pm ]
Заглавие:  Re: Задача асемблер за PIC16C73

човека иска асемблер - ротации, събирания, никви инт никви чар :)

Автор:  Vesko [ Вто Фев 11, 2014 12:45 pm ]
Заглавие:  Re: Задача асемблер за PIC16C73

CarBeta написа:
В случая е важно да се напише на асемблер и резултата винаги да е верен. Уловките по-скоро са 16 битовaтa променливa за резултат и приоритета на аритметиката.


Точно това "винаги да е верен" си май неизпълнимо.
Например: Ако А = 64 и B = 0, то

64*4+0xb2 = 0xb2, ако се смята в int8
= 0x1b2, ако се смята в int16

Иначе вероятно за целите на задачата, надали има значение. :)

Автор:  Cekins [ Вто Фев 11, 2014 1:03 pm ]
Заглавие:  Re: Задача асемблер за PIC16C73

Е как пък да няма значение? Ако е Int8 няма да го интересува C флага, няма да има допълнителна команда да си оправя старшия байт. Освен това А*4 ако примерно А=180 и ако А се смята само като байт (демек rlf два пъти) е едно а ако трябва да си се сметне като int16 с проверка на кери и т.н. става друго. Въобще заданието е страшно непълно. Очевидно е, че който е дал заданието иска да види rrf и rlf ама дали с пренос или без и т.н. - не е ясно. Затова, както още в началото казах - тегли се един компилатор, написва си го на къвто език си ще, компилира, поочиства кода да изглежда като писан на ръка и ще блесне пред даскала. Пък че нищо няма да научи - тва вече друга тема.

Автор:  CarBeta [ Вто Фев 11, 2014 2:13 pm ]
Заглавие:  Re: Задача асемблер за PIC16C73

Условието си е много ясно - асемблер, MPlab
Цитат:
където А – еднобайтова променлива в данновата памет;
В – еднобайтова променлива в данновата памет.

Какви интежъри ви гонят на асемблер. Работи се с байтове в хекс. Естествено че R ще бъде двубайтова променлива ако искаме да смята вярно за всички стойности от 0x00 до 0xFF. То и това е уловка, щото с по-големи стойности за А няма как да мине без пренос. Идеята е да се замисли човек как с 8 битов контролер да скалъпи цялата галимация.

Автор:  Vesko [ Вто Фев 11, 2014 2:50 pm ]
Заглавие:  Re: Задача асемблер за PIC16C73

CarBeta написа:
Условието си е много ясно - асемблер, MPlab
Цитат:
където А – еднобайтова променлива в данновата памет;
В – еднобайтова променлива в данновата памет.

Какви интежъри ви гонят на асемблер. Работи се с байтове в хекс. Естествено че R ще бъде двубайтова променлива ако искаме да смята вярно за всички стойности от 0x00 до 0xFF. То и това е уловка, щото с по-големи стойности за А няма как да мине без пренос. Идеята е да се замисли човек как с 8 битов контролер да скалъпи цялата галимация.


И кое му е естественото? В С е нормално цялата математика да е int (16 или 32 зависи от компилатора, ако A и B са char или int), Обаче няма изисквания за R да е int, може да си е char. Въпрос на мислене и на условие на задачата си е, а в случая недефинирано. Поне в цитираното условие.

Страница 1 от 6 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/