реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Первая команда в проекте на асме......, Мне не совсем понятно что она означает......
Potter
сообщение Feb 2 2007, 10:03
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 151
Регистрация: 27-05-06
Из: Харьков
Пользователь №: 17 508



Значит... Создал проект в AVR_studio...... С самого начала я пишу вот такую команду:

.cseg
.org 130

Я не совсем понимаю что она означает.... Я так понимаю что это я указываю размер чего-то.... Но чего?
Go to the top of the page
 
+Quote Post
Wild007
сообщение Feb 2 2007, 10:14
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 226
Регистрация: 25-03-05
Из: Беларусь
Пользователь №: 3 672



Цитата(Potter @ Feb 2 2007, 09:03) *
Значит... Создал проект в AVR_studio...... С самого начала я пишу вот такую команду:

.cseg
.org 130

Я не совсем понимаю что она означает.... Я так понимаю что это я указываю размер чего-то.... Но чего?


.cseg -- Означает, что дальнейшее (код, константы) расположены в "програмном" сегменте памяти.
.dseg -- Означает, что дальнейшее (переменные) расположены в сегменте ОЗУ
.eseg -- Означает, что дальнейшее (константы) расположены в сегменте ПЗУ

.org ХХХ -- это "точка" с которой начинается расположение кода .


--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
Go to the top of the page
 
+Quote Post
mse
сообщение Feb 2 2007, 10:28
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693



Цитата(Potter @ Feb 2 2007, 10:03) *
Значит... Создал проект в AVR_studio...... С самого начала я пишу вот такую команду:

.cseg
.org 130

Я не совсем понимаю что она означает.... Я так понимаю что это я указываю размер чего-то.... Но чего?

Выше товарищ дал пральный ответ. Уточню мала-мала...
.org 130 с самого начала ставить бессмысленно и опасно(в одном флаконе).
Бо у АВРа старт программки после сброса начинается с адреса "0" и дальше лежат фиксированные адреса векторов прерываний. В общем, можете огрести. Почитайте секцыю "Интеррупт" своей АВРы.
Go to the top of the page
 
+Quote Post
el34
сообщение Feb 2 2007, 10:35
Сообщение #4


инженер
****

Группа: Свой
Сообщений: 717
Регистрация: 4-03-05
Пользователь №: 3 064



mse>org 130 с самого начала ставить бессмысленно и опасно(в одном флаконе).
верно...но....
это не страшно..... если в теле программы(в другом ее месте) присутствует и
.cseg
.org 0.....и там описаны вектора....


--------------------
........поужинали вяленой рыбой, кот лежал рядом, молчали.......
Go to the top of the page
 
+Quote Post
Potter
сообщение Feb 2 2007, 10:39
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 151
Регистрация: 27-05-06
Из: Харьков
Пользователь №: 17 508



Приогромнеешее спасибо.... Дело в том что я пять лет програмлю авр... Но начал я с разу с С++. А теперь хочу разобраться с ассемблером..... Трудновато получается но вроде получается.... По ходу дела могут еще возникать примитивные вопросы и не судите товарищи я буду просить у вас помощи.....
Go to the top of the page
 
+Quote Post
Wild007
сообщение Feb 2 2007, 10:46
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 226
Регистрация: 25-03-05
Из: Беларусь
Пользователь №: 3 672



Правильно начинать программу так (ИМХО):
Цитата
.CSEG
;********************** Вектора перехода *******************************
.ORG 0
RJMP RESET ;вектор перехода по сбросу
.ORG INT0addr ; External Interrupt Request 0
RETI
.ORG INT1addr ; External Interrupt Request 1
RETI ;
.ORG ICP1addr ; Timer/Counter1 Capture Event
RETI
.ORG OC1Aaddr ; Timer/Counter1 Compare Match A
RETI ;RJMP ;вектор перехода по совпадению таймера1
.ORG OVF1addr ; Timer/Counter1 Overflow
RETI ;RJMP ;вектор перехода по переполнению таймера1
.ORG OVF0addr ; Timer/Counter0 Overflow
RETI ;RJMP ;вектор перехода по переполнению таймера0
.ORG URXCaddr ; USART, Rx Complete
RETI
.ORG UDREaddr ; USART Data Register Empty
RETI
.ORG UTXCaddr ; USART, Tx Complete
RETI
.ORG ACIaddr ; Analog Comparator
RETI
.ORG PCIaddr ;
RETI
.ORG OC1Baddr ;
RETI
.ORG OC0Aaddr
RETI
.ORG OC0Baddr ;
RETI
.ORG USI_STARTaddr ; USI Start Condition
RETI
.ORG USI_OVFaddr ; USI Overflow
RETI
.ORG ERDYaddr ;
RETI
.ORG WDTaddr ; Watchdog Timer Overflow
RETI

А програмный код:
Код
.CSEG
.ORG INT_VECTORS_SIZE
RESET:
    CLI

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


--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
Go to the top of the page
 
+Quote Post
add
сообщение Feb 2 2007, 10:53
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 345
Регистрация: 10-10-05
Пользователь №: 9 459



Хочу добавить, что если это сегмент кода (.cseg) то
.org 130 ;означает что реальный адрес 260 (те. 260-тый байт)
поскольку адресация двухбайтовая.


--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
Go to the top of the page
 
+Quote Post
Potter
сообщение Feb 2 2007, 11:04
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 151
Регистрация: 27-05-06
Из: Харьков
Пользователь №: 17 508



Цитата(add @ Feb 2 2007, 11:53) *
Хочу добавить, что если это сегмент кода (.cseg) то
.org 130 ;означает что реальный адрес 260 (те. 260-тый байт)
поскольку адресация двухбайтовая.


Маленький вопросик... Наверно 130 в данном случае это цифра в шеснадцатиричной системе..... Или я что-то непонимаю.....

И еще... При сумирувание однобайтных чисел: если число при сумирувании больше 255 то в определенном регистре в опреленном бите устанавливается единичка... А остаток от 255 заносится в один из регистров... Так вот... подскажите пожалуйста что это за регистр и что это за бит?
Go to the top of the page
 
+Quote Post
add
сообщение Feb 2 2007, 11:14
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 345
Регистрация: 10-10-05
Пользователь №: 9 459



Хочу добавить, что если это сегмент кода (.cseg) то
.org 130 ;означает что реальный адрес 260 (те. 260-тый байт)
поскольку адресация двухбайтовая. К примеру если использовать косвенную адресацию,и командой lpm читать данные из флеш,то в регистры zh:zl необходимо записать именно 230.



ldi zl,low(230);
ldi zh,high(230);
lpm
;далее читаем r0 в котором лежит 0x12

.org 130
.db 0x12,0x14
....

зы: Но всеже лучше использовать ссылку на место во flash так:
ldi zl,low(data*2)
ldi zh,high(data*2);
lpm
;далее читаем r0 в котором лежит 0x12

data:
.db 0x12,0x14
....
Цитата
Маленький вопросик... Наверно 130 в данном случае это цифра в шеснадцатиричной системе..... Или я что-то непонимаю.....

И еще... При сумирувание однобайтных чисел: если число при сумирувании больше 255 то в определенном регистре в опреленном бите устанавливается единичка... А остаток от 255 заносится в один из регистров... Так вот... подскажите пожалуйста что это за регистр и что это за бит?

в десятичке-130, 0x130 и 130h (шеснадцатирич) , 0b0000000 - двоичка.
При сложении устанавл. перенос флаг "C" регистра SREG.
add r16,r17 ;сложение с переносом
adc r18,r19


--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
Go to the top of the page
 
+Quote Post
Wild007
сообщение Feb 2 2007, 11:14
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 226
Регистрация: 25-03-05
Из: Беларусь
Пользователь №: 3 672



Цитата
И еще... При сумирувание однобайтных чисел: если число при сумирувании больше 255 то в определенном регистре в опреленном бите устанавливается единичка... А остаток от 255 заносится в один из регистров... Так вот... подскажите пожалуйста что это за регистр и что это за бит?


Код
LDI R16,0xFE
LDI R17,0x02
ADD R16,R17


В результате в R16 "имеем" 0х01, а бит С в регистре SREG устанавливается в 1


--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
Go to the top of the page
 
+Quote Post
Potter
сообщение Feb 2 2007, 11:18
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 151
Регистрация: 27-05-06
Из: Харьков
Пользователь №: 17 508



Еще раз спасибо за помощь....
Go to the top of the page
 
+Quote Post
add
сообщение Feb 2 2007, 11:20
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 345
Регистрация: 10-10-05
Пользователь №: 9 459



Прошу прощения за повторы.. неуспел поправить сообщение.. :-(

Хочу добавить, что если это сегмент кода (.cseg) то
.org 130 ;означает что реальный адрес 260 (те. 260-тый байт)
поскольку адресация двухбайтовая. К примеру если использовать косвенную адресацию,и командой lpm читать данные из флеш,то в регистры zh:zl необходимо записать именно 230.



ldi zl,low(230);
ldi zh,high(230);
lpm
;далее читаем r0 в котором лежит 0x12

.org 130
.db 0x12,0x14
....

зы: Но всеже лучше использовать ссылку на место во flash так:
ldi zl,low(data*2)
ldi zh,high(data*2);
lpm
;далее читаем r0 в котором лежит 0x12

data:
.db 0x12,0x14
....
Цитата
Маленький вопросик... Наверно 130 в данном случае это цифра в шеснадцатиричной системе..... Или я что-то непонимаю.....

И еще... При сумирувание однобайтных чисел: если число при сумирувании больше 255 то в определенном регистре в опреленном бите устанавливается единичка... А остаток от 255 заносится в один из регистров... Так вот... подскажите пожалуйста что это за регистр и что это за бит?

в десятичке-130, 0x130 и 130h (шеснадцатирич) , 0b0000000 - двоичка.
При сложении устанавл. перенос флаг "C" регистра SREG.
add r16,r17 ;сложение с переносом
adc r18,r19
При сумировании никуда ничего незаносится, а устанавливается флаг переноса, и если сложить два регистра без учета перполнения то данные потеряются. т.е 254 + 10 в регистре к которому прибавляли будет 8 и установиться флаг SREG.с.


--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
Go to the top of the page
 
+Quote Post
mse
сообщение Feb 2 2007, 11:25
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693



Цитата(el34 @ Feb 2 2007, 10:35) *
mse>org 130 с самого начала ставить бессмысленно и опасно(в одном флаконе).
верно...но....
это не страшно..... если в теле программы(в другом ее месте) присутствует и
.cseg
.org 0.....и там описаны вектора....

;О) Я-ж и говорю "В общем, можете огрести." Если бы человек был в курсе, как можно тасовать сегменты, он бы такой вопрос не задавал.
Go to the top of the page
 
+Quote Post
el34
сообщение Feb 2 2007, 11:43
Сообщение #14


инженер
****

Группа: Свой
Сообщений: 717
Регистрация: 4-03-05
Пользователь №: 3 064



mse>;О) Я-ж и говорю "В общем, можете огрести." Если бы человек был в курсе, как можно тасовать сегменты, он бы такой вопрос не задавал.

абсолютно с Вами согласен, но тем более , если чел пытается понять что значит .cseg ....и будет думать . что .cseg с оргом !=0 в начале это ошибка
это его надолго может запутать и поэтому уточнил....


--------------------
........поужинали вяленой рыбой, кот лежал рядом, молчали.......
Go to the top of the page
 
+Quote Post
Wild007
сообщение Feb 2 2007, 12:03
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 226
Регистрация: 25-03-05
Из: Беларусь
Пользователь №: 3 672



Цитата(el34 @ Feb 2 2007, 10:43) *
mse>;О) Я-ж и говорю "В общем, можете огрести." Если бы человек был в курсе, как можно тасовать сегменты, он бы такой вопрос не задавал.

абсолютно с Вами согласен, но тем более , если чел пытается понять что значит .cseg ....и будет думать . что .cseg с оргом !=0 в начале это ошибка
это его надолго может запутать и поэтому уточнил....

Не грузите человека сразу и по многу smile.gif . А то у него каша в голове будет образовываться smile.gif . smile.gif smile.gif


--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 13:01
Рейтинг@Mail.ru


Страница сгенерированна за 0.01499 секунд с 7
ELECTRONIX ©2004-2016