IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

 
 Ответить  Открыть новую тему 
> как передать массив в асм модуль ?, ?
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 14

Репутация: -  0  +


допустим у меня есть программа на паскале. в ней есть (описан) некоторый массив(любой). с этим массивом надо сделать какие-то изменения (неважно какие), но эти изменения должна делать процедура, которая находится в отдельном модуле. данная процедура должна быть написана на асемблере (то есть надо использовать встроенный ассемблер паскаля). так вот, суть самой проблемы: я не могу передать в эту процедуру сам массив как переменную (то есть передать не массив значний, а массив переменных)... выдается сообщение что операнды н соответствуют друг другу sad.gif .... я там по всякому уже изголялся, но ничего хорошего так и не получилось.

ЗЫ: однако если в самой процедуре описать массив, то ассебмлер будет его обрабатывать!!!!!! <_< ... это меня смущает...

ЗЫ2: как передавать массив в процедуру - я знаю (пишу на всякий случай, чтобы вы это не писали).

если есть какие-нить предположения, то напишите мне.

спасибо ;)smile.gif.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 775
Пол: Мужской

Репутация: -  0  +


Дык может все-таки передавать не массив, а ссылочку на него (тип Pointer)??
Которая будет валяться в стеке и занимать всего 4 б.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 14

Репутация: -  0  +


не-а, именно сам массив !!!
массив не надо размещать в динамической памяти.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Профи
****

Группа: Пользователи
Сообщений: 775
Пол: Мужской

Репутация: -  0  +


Да какая разница, он все равно должен быть в стеке.
Разве что описалово процедуры реализуется с VAR, типа (procedure OldDood(var a:array[1..21] of Char);)

Цитата
Массив не надо размещать в динамической памяти

Он у тебя изначально по дефолту там...
добавлено позже
А что это за извращение-то такое, когда по ссылке нельзя передавать, а весь массив можно и даже нужно, преподы болеют??

Сообщение отредактировано: GLuk -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 14

Репутация: -  0  +


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

если не сложно, напиши код smile.gif.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Должно быть где-то так:
Procedure ProcessArray(Var A:TMyArray);External;

Var
 a:TMyArray;

Begin
 ...
 ProcessArray(a);
 ...
End.

В саой процедуре надо работать примерно так:

LES DI,[a]
...

И через ES:DI к массиву и обращаться. Естественно A[i] это [SOMETYPE PTR (ES:DI)+i*SIZE SOMETYPE]
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 23.10.2021 9:02
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name