Консультация № 161172
23.02.2009, 10:38
0.00 руб.
0 1 0
Здравствуйте! я использую ассемблерную вставку в делфи... Подскажите плз как передать переменную. Например, я вызываю процедуру KBlock в ассемблерной вставке, эта процедура должна обработать переменную Temp, которую использую ранее до процедуры. Хотя и объявляю эту переменную и R переменную в private , даёт ошибку неизвестная переменная. Затем мне нужен результат этой процедуры возратить или куда-нибудь сохранить, чтобы передать другой процедуре Shift11R и опять возвратить результат в переменной R, чтобы дальше с ней работать? Думала вызвать через функцию эти процедуры, т.е. выйти из ассемблерной вставки и в делфи вызвать фунцию,потом дальше продолжить типа begin asm @cycle1..end; функция asm..loop @cycle1 end; end; но прерывать цикл кажется нельзя, потому, что пишет неизвестная метка и потом мне надо будет фозвращать маассив байтов, а я не знаю как это делать, точнее пробывала, но безрезультатно. Как мне быть???

Приложение:
...
private
Temp: string[4];
R:string[8];
...
procedure KBlock;
var
begin
asm
...
xor ebx, ebx
...
mov al, byte ptr Temp[ebx]
...
end;
for i:=0 to 7 do
Temp[i]:=StrToInt(ShifrZamForm2.StringGrid1.Cells[str[i], stb[i]]);
end;
...

procedure ShiftR11;
begin
asm
...
rcr Temp[ebx], cl
inc ebx
mov ecx, 4
xor ebx, ebx
mov al, byte ptr Temp[ebx]
mov byte ptr R[ebx], al
...
end;
end;

...
function shifr(N1, N2:string): String;
var
Temp: string[4];
begin
asm
@cycle1:
...
mov al, byte ptr N1[ebx]
mov byte ptr Temp[ebx], al
...
call KBlock;
call ShiftR11;
...
xor byte ptr R[ebx], al
; ещё код
...
loop @cycle1
end;
end;

Обсуждение

Неизвестный
01.03.2009, 15:12
общий
Ну положим от "неизвестной метки" можно избавиться просто ее описав в секции label. С переменными никаких проблем не было обычно. И зачем ее в private? Почему не просто объявить? А если у вас класс, то похоже у вас недостаточное знание основ Дельфи - в этом случае метод тоже должен быть методом класса, чтобы работать с переменными класса или использовать конкретный экземпляр объекта.
Форма ответа