Перейти к содержанию
    

Создание и работа с переменными в ассемблере

Не могу понять как создавать и работать с переменными разного размера в ассемблере в Keil. Директивы DB, DW, DD выдают ошибку(похоже на то, что Keil их вообще не знает), BYTE, WORD, DWORD - то же самое. Как я понял директивы GBLL, GBLS, GBLA создают (в RAM?) переменную и далее ей можно придать значение используя SETA, SETL, SETS, но при попытке повторно сохранить значение этой переменной получаем ошибку при компиляции, да и не понятно где именно в памяти Keil разместит переменную. Можно конечно сделать так Var0 EQU 0x(адрес переменной в памяти), но есть ли другие(более удобные) способы ? И как вообще принято это делать?

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


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

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

DCB, DCW, DCWU, DCD, DCDU....

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


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

DCB, DCW, DCWU, DCD, DCDU....

 

Вот допустим я делаю счетчик, пишу test0 DCWU 0xFFFF

Затем уменьшаю на 1 ( MOV32 R0, #test0

SUB R0, #1)

Её сохранять обратно в память таким образом? - STR R0, [#test0] ? Компилятор выделит память под 4 байта?

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


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

Вот допустим я делаю счетчик, пишу test0 DCWU 0xFFFF

Затем уменьшаю на 1 ( MOV32 R0, #test0

SUB R0, #1)

Её сохранять обратно в память таким образом? - STR R0, [#test0] ? Компилятор выделит память под 4 байта?

 

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

 

 

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


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

Вот допустим я делаю счетчик, пишу test0 DCWU 0xFFFF

Затем уменьшаю на 1 ( MOV32 R0, #test0

SUB R0, #1)

Её сохранять обратно в память таким образом? - STR R0, [#test0] ? Компилятор выделит память под 4 байта?

DCWU это и есть "выделение" памяти.

Вы не сообщили, зачем именно ассемблер, но одним из лозунгов ARM при введении Cortex и ПО к нему (CMSIS, периферийных библиотек производителей) было типа "no assembler".

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


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

Вы не сообщили, зачем именно ассемблер

Уже спрашивали там. Ответ получился сумбурный и ни разу не убедительный.

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


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

Вы не сообщили, зачем именно ассемблер
Сообщал недели две назад. Объясняли. Не помогает. Ну хочет человек пробежаться по граблям. Не будем мешать.

 

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


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

Не могу понять как создавать и работать с переменными разного размера в ассемблере в Keil

 

Документацию надо читать -- там всё написано.

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


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

Сообщал недели две назад...

с такими скоростями... первый проект выйдет когда чипы на cortex-m3 перестанут выпускаться :bb-offtopic:

 

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


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

Вот допустим я делаю счетчик, пишу 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,что,собственно говоря,получилось,

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

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


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

2) без ассемблера никуда-потому что самый лучший оптимизатор-это твоя собственная голова.Ни одному компилятору не понять прелестей некоторых команд и режимов адресации.

С оговорками. Голова может оптимизировать ограниченный объём кода. В "среднем по больнице" современные компиляторы выигрывают всегда. Ну и самое главное: оптимизация реально требуется крайне редко. Обычно это прихоть новичков.

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


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

С оговорками. Голова может оптимизировать ограниченный объём кода. В "среднем по больнице" современные компиляторы выигрывают всегда. Ну и самое главное: оптимизация реально требуется крайне редко. Обычно это прихоть новичков.

Имеется в виду оптимизация, которую делает компилер, или кодер, используя асм-вставки в си коде?

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


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

Имеется в виду оптимизация, которую делает компилер, или кодер, используя асм-вставки в си коде?

И то, и другое.

Хотя сейчас работаю над программой, которая при нулевом уровне оптимизации уже не лезет в флеш. Для внутрисхемной отладки компилирую с оптимизацией по размеру, а потом отлаживаемый файл перекомпилирую с нулевой оптимизацией, чтобы влезло :-)

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

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

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

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

×
×
  • Создать...