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

 
 
 
Reply to this topicStart new topic
> Объявление переменной в IAR на асме, Поясните смысл куска кода
Grubber
сообщение Aug 7 2013, 07:48
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 28-05-13
Пользователь №: 77 007



Разбираюсь в чужом коде, написанном в среде IAR. В проекте часть идентификаторов объявлены на ассембреле. Пользуюсь хелпом по асму от IAR. В коде есть строка
CODE
bufer DS16 32

Это равнозначно объявлению на Си
CODE
int bufer[32]
?
В док-ии написано что в директиве DS16 size_expr параметр означает число выделенных байт. Но меня посетили сомнения, подтвердите их или опровергните пожалуйста!
Go to the top of the page
 
+Quote Post
Xenia
сообщение Aug 7 2013, 08:57
Сообщение #2


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(Grubber @ Aug 7 2013, 11:48) *
В док-ии написано что в директиве DS16 size_expr параметр означает число выделенных байт.

Нет, в документации (AssemblerReference) написано иное:

Цитата
Summary of assembler directives
...
DS Allocates space for 8-bit bytes. Data definition or allocation
DS16 Allocates space for 16-bit words. Data definition or allocation
DS24 Allocates space for 24-bit words. Data definition or allocation
DS32 Allocates space for 32-bit words. Data definition or allocation
DS8 Allocates space for 8-bit bytes. Data definition or allocation

Т.е. директива DS16 выделяет 16 бит, а не 8.
Go to the top of the page
 
+Quote Post
Grubber
сообщение Aug 7 2013, 09:21
Сообщение #3





Группа: Новичок
Сообщений: 3
Регистрация: 28-05-13
Пользователь №: 77 007



Цитата
Т.е. директива DS16 выделяет 16 байт, а не 8.

вааще не понял

еще посмотрел подробнее в доке и нашел пример где ALIASом для DS16 является DS 2. директива DS 2 выделит 2 байта. Т.е. похоже что
Код
bufer     DS16    32
равнозначно на С
Код
int bufer[32]
Go to the top of the page
 
+Quote Post
Xenia
сообщение Aug 7 2013, 10:27
Сообщение #4


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(Grubber @ Aug 7 2013, 13:21) *
вааще не понял
еще посмотрел подробнее в доке и нашел пример где ALIASом для DS16 является DS 2. директива DS 2 выделит 2 байта. Т.е. похоже что
Код
bufer     DS16    32
равнозначно на С
Код
int bufer[32]


Чего вы не поняли? DS (как и ее синоним DS8) - монета достоинством 8 копеек (битов), в DS16 - достоинством в два раза больше - 16 копеек (битов). Вам же надо заплатить за buffer 32x16 копеек (бит). Поэтому можно заплатить и так:
bufer DS 64
и так:
bufer DS16 32
и так:
bufer DS32 16
Все это будут одинаковые по цене платежи, но разными монетами.
Однако монетами достоинством в один элемент массива платить приятнее, т.к. тогда число монет будет равно числу элементов массива (не надо будет умножать или делить в уме). Именно для этой цели и создали более крупные по достоинству монеты DS16, DS24, DS32, номинал которых отражен в самом их названии.
Go to the top of the page
 
+Quote Post
Grubber
сообщение Aug 7 2013, 11:16
Сообщение #5





Группа: Новичок
Сообщений: 3
Регистрация: 28-05-13
Пользователь №: 77 007



не понятно когда биты байтами называют angry.gif , а вопрос остается неотвеченным (вот и помогай нам, новичкам)
За второй ответ искренний СПС!
Ну что все всЁ деньгами меряют? ведь есть же другие меры: кошки, яблоки salmari.gif
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 2nd August 2025 - 18:50
Рейтинг@Mail.ru


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