Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Взаимодействие Си и Асма

13K
06 сентября 2005 года
Alecksey Anuchi
2 / / 06.09.2005
Вопрос не про C++ от Borland, а скорее о Си вообще.
Нужна помощь квалифицированного специалиста...
Как в ассемблере воспользоваться именем переменной, объявленной в Си. То есть нужно написать:

AsmMyStruct_X .equ _MyStruct.X

Когда я пишу

AsmX .equ _X

то это работает, но как обратиться к элементу структуры? Си не генерирует переменной с подчеркианием для нее, а смещение от начала структуры зависит от того, как это выравнилось в памяти при линковке.

Заранее спасибо
299
06 сентября 2005 года
3D Bob
885 / / 18.04.2005
Cмещение зависит от размера предыдущих элементов, на мой взгляд и все. Сам не пробовал, но струкутры на асме писал, и использовал.
310
06 сентября 2005 года
fellow
853 / / 17.03.2003
wasm.ru - полезный сайт
10
06 сентября 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by Alecksey Anuchi
Си не генерирует переменной с подчеркианием для нее, а смещение от начала структуры зависит от того, как это выравнилось в памяти при линковке.


Для "межкомпиляторных" типов данных, как правило, отключают выравнивание, чтобы не иметь геморроя. Посмотри, например, на WinAPI - все зарезервированные поля заданы явно.

13K
07 сентября 2005 года
Alecksey Anuchi
2 / / 06.09.2005
Цитата:
Originally posted by Freeman
Для "межкомпиляторных" типов данных, как правило, отключают выравнивание, чтобы не иметь геморроя. Посмотри, например, на WinAPI - все зарезервированные поля заданы явно.



Не все так просто...
Если первый элемент слово, а второй двойное слово, то первый ложится как хочет, а второй только с четного адреса, то есть пространство в слово между ними может возникать произвольно.
Это микроконтроллер и в силу его аппаратной архитектуры двойное слово читается только с четного адреса.
Для получения всегда четных адресов можно включить выравнивание, но памяти данных в контроллере мало, а тогда слова будут тоже выравниваться по четному адресу. То есть основной тип переменной будет занимать двойной объем памяти.

10
07 сентября 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by Alecksey Anuchi
Если первый элемент слово, а второй двойное слово, то первый ложится как хочет, а второй только с четного адреса, то есть пространство в слово между ними может возникать произвольно.


Даже если это микроконтроллер, он по определению ничего хотеть не может. Наверняка существуют четкие правила размещения данных. Тебе надо выбрать соответствующую схему адресации и описать упакованные типы с вручную зарезервированными полями пропусков.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог