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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Создание и работа с переменными в ассемблере
allsettingsdone
сообщение Feb 3 2014, 07:11
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 22-01-13
Пользователь №: 75 284



Не могу понять как создавать и работать с переменными разного размера в ассемблере в Keil. Директивы DB, DW, DD выдают ошибку(похоже на то, что Keil их вообще не знает), BYTE, WORD, DWORD - то же самое. Как я понял директивы GBLL, GBLS, GBLA создают (в RAM?) переменную и далее ей можно придать значение используя SETA, SETL, SETS, но при попытке повторно сохранить значение этой переменной получаем ошибку при компиляции, да и не понятно где именно в памяти Keil разместит переменную. Можно конечно сделать так Var0 EQU 0x(адрес переменной в памяти), но есть ли другие(более удобные) способы ? И как вообще принято это делать?
Go to the top of the page
 
+Quote Post
Палыч
сообщение Feb 3 2014, 07:27
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(allsettingsdone @ Feb 3 2014, 11:11) *
Директивы DB, DW, DD выдают ошибку(похоже на то, что Keil их вообще не знает), BYTE, WORD, DWORD - то же самое.

DCB, DCW, DCWU, DCD, DCDU....
Go to the top of the page
 
+Quote Post
allsettingsdone
сообщение Feb 3 2014, 07:54
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 22-01-13
Пользователь №: 75 284



Цитата(Палыч @ Feb 3 2014, 09:27) *
DCB, DCW, DCWU, DCD, DCDU....


Вот допустим я делаю счетчик, пишу test0 DCWU 0xFFFF
Затем уменьшаю на 1 ( MOV32 R0, #test0
SUB R0, #1)
Её сохранять обратно в память таким образом? - STR R0, [#test0] ? Компилятор выделит память под 4 байта?
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Feb 3 2014, 08:12
Сообщение #4


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(allsettingsdone @ Feb 3 2014, 10:54) *

http://infocenter.arm.com/help/index.jsp?t...b/Bcfihdhj.html


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Feb 3 2014, 08:37
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата(allsettingsdone @ Feb 3 2014, 11:54) *
Вот допустим я делаю счетчик, пишу test0 DCWU 0xFFFF
Затем уменьшаю на 1 ( MOV32 R0, #test0
SUB R0, #1)
Её сохранять обратно в память таким образом? - STR R0, [#test0] ? Компилятор выделит память под 4 байта?


мне всегда помогало написать код на С, а потом поглядеть дизассемблер после компиляции.

Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Feb 3 2014, 08:39
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(allsettingsdone @ Feb 3 2014, 08:54) *
Вот допустим я делаю счетчик, пишу test0 DCWU 0xFFFF
Затем уменьшаю на 1 ( MOV32 R0, #test0
SUB R0, #1)
Её сохранять обратно в память таким образом? - STR R0, [#test0] ? Компилятор выделит память под 4 байта?

DCWU это и есть "выделение" памяти.
Вы не сообщили, зачем именно ассемблер, но одним из лозунгов ARM при введении Cortex и ПО к нему (CMSIS, периферийных библиотек производителей) было типа "no assembler".
Go to the top of the page
 
+Quote Post
scifi
сообщение Feb 3 2014, 09:22
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(KnightIgor @ Feb 3 2014, 12:39) *
Вы не сообщили, зачем именно ассемблер

Уже спрашивали там. Ответ получился сумбурный и ни разу не убедительный.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 3 2014, 09:26
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(KnightIgor @ Feb 3 2014, 10:39) *
Вы не сообщили, зачем именно ассемблер
Сообщал недели две назад. Объясняли. Не помогает. Ну хочет человек пробежаться по граблям. Не будем мешать.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
SII
сообщение Feb 3 2014, 10:16
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 13-07-10
Из: Солнечногорск-7
Пользователь №: 58 414



Цитата(allsettingsdone @ Feb 3 2014, 11:11) *
Не могу понять как создавать и работать с переменными разного размера в ассемблере в Keil


Документацию надо читать -- там всё написано.
Go to the top of the page
 
+Quote Post
allsettingsdone
сообщение Feb 3 2014, 10:46
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 22-01-13
Пользователь №: 75 284



Цитата(Палыч @ Feb 3 2014, 09:27) *
DCB, DCW, DCWU, DCD, DCDU....

Похоже что так всё работает, спасибо.
Go to the top of the page
 
+Quote Post
KRS
сообщение Feb 4 2014, 00:44
Сообщение #11


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(Сергей Борщ @ Feb 3 2014, 13:26) *
Сообщал недели две назад...

с такими скоростями... первый проект выйдет когда чипы на cortex-m3 перестанут выпускаться bb-offtopic.gif
Go to the top of the page
 
+Quote Post
romas2010
сообщение Feb 12 2014, 20:06
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 25-11-11
Пользователь №: 68 515



Цитата(allsettingsdone @ Feb 3 2014, 11:54) *
Вот допустим я делаю счетчик, пишу test0 DCWU 0xFFFF
Затем уменьшаю на 1 ( MOV32 R0, #test0
SUB R0, #1)
Её сохранять обратно в память таким образом? - STR R0, [#test0] ? Компилятор выделит память под 4 байта?


Компилятор выделит 2 байта...более того,если вы этой командой перезапишете значение переменной test0,то потом 3 дня будете рвать на себе волосы,пытаясь понять,почему вдруг соседние 2 байта тоже вдруг перезаписываются...

Давайте исходить из следующих аксиом
1) не надо из ассемблера делать фетиш и тотем...программа на ассемблере размером более 100 строк непонятна уже даже ее автору
2) без ассемблера никуда-потому что самый лучший оптимизатор-это твоя собственная голова.Ни одному компилятору не понять прелестей некоторых команд и режимов адресации.
Отсюда выявляется золотая середина- оформленные в оболочку С-функций короткие подпрограммы,выполняющиеся быстрее эквивалентного С-кода хотя бы в 3 раза.
Учим матчасть Keil->help->mVision help-> embeded assembler,instruction set,assembler user guide,compiler guide и пр.
Пишем короткие программы,циклы,условия,компилируем,входим в симулятор,и наблюдаем в окне Disassemble,что,собственно говоря,получилось,
разбираемся,как компилятор получает доступ к переменным,к полям структур,работу с указателями,как передать в функцию параметры и пр..
Go to the top of the page
 
+Quote Post
scifi
сообщение Feb 12 2014, 20:12
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(romas2010 @ Feb 13 2014, 00:06) *
2) без ассемблера никуда-потому что самый лучший оптимизатор-это твоя собственная голова.Ни одному компилятору не понять прелестей некоторых команд и режимов адресации.

С оговорками. Голова может оптимизировать ограниченный объём кода. В "среднем по больнице" современные компиляторы выигрывают всегда. Ну и самое главное: оптимизация реально требуется крайне редко. Обычно это прихоть новичков.
Go to the top of the page
 
+Quote Post
ohmjke
сообщение Feb 14 2014, 05:46
Сообщение #14


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

Группа: Участник
Сообщений: 116
Регистрация: 27-01-10
Из: СПб
Пользователь №: 55 094



Цитата(scifi @ Feb 13 2014, 00:12) *
С оговорками. Голова может оптимизировать ограниченный объём кода. В "среднем по больнице" современные компиляторы выигрывают всегда. Ну и самое главное: оптимизация реально требуется крайне редко. Обычно это прихоть новичков.

Имеется в виду оптимизация, которую делает компилер, или кодер, используя асм-вставки в си коде?
Go to the top of the page
 
+Quote Post
scifi
сообщение Feb 14 2014, 06:14
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(ohmjke @ Feb 14 2014, 09:46) *
Имеется в виду оптимизация, которую делает компилер, или кодер, используя асм-вставки в си коде?

И то, и другое.
Хотя сейчас работаю над программой, которая при нулевом уровне оптимизации уже не лезет в флеш. Для внутрисхемной отладки компилирую с оптимизацией по размеру, а потом отлаживаемый файл перекомпилирую с нулевой оптимизацией, чтобы влезло :-)
Go to the top of the page
 
+Quote Post

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

 


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


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