допустим у меня есть программа на паскале. в ней есть (описан) некоторый массив(любой). с этим массивом надо сделать какие-то изменения (неважно какие), но эти изменения должна делать процедура, которая находится в отдельном модуле. данная процедура должна быть написана на асемблере (то есть надо использовать встроенный ассемблер паскаля). так вот, суть самой проблемы: я не могу передать в эту процедуру сам массив как переменную (то есть передать не массив значний, а массив переменных)... выдается сообщение что операнды н соответствуют друг другу .... я там по всякому уже изголялся, но ничего хорошего так и не получилось.
ЗЫ: однако если в самой процедуре описать массив, то ассебмлер будет его обрабатывать!!!!!! <_< ... это меня смущает...
ЗЫ2: как передавать массив в процедуру - я знаю (пишу на всякий случай, чтобы вы это не писали).
если есть какие-нить предположения, то напишите мне.
спасибо ;).
Дык может все-таки передавать не массив, а ссылочку на него (тип Pointer)??
Которая будет валяться в стеке и занимать всего 4 б.
не-а, именно сам массив !!!
массив не надо размещать в динамической памяти.
Да какая разница, он все равно должен быть в стеке.
Разве что описалово процедуры реализуется с VAR, типа (procedure OldDood(var a:array[1..21] of Char);)
это не извращение, просто тема : связь ассемблера с языками высокого уровня.
если не сложно, напиши код .
Должно быть где-то так:
Procedure ProcessArray(Var A:TMyArray);External;
Var
a:TMyArray;
Begin
...
ProcessArray(a);
...
End.
И через ES:DI к массиву и обращаться. Естественно A[i] это [SOMETYPE PTR (ES:DI)+i*SIZE SOMETYPE]
LES DI,[a]
...