![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
вставка на ассемблере
sat © (2007-04-01 18:16:00)помогите отладить пожалуйста вставку в Delphi на ассемблере
смысл задачи задается произвольный массив и в нем ищется индекс 0
если 0 есть переменно result:=1 иначе -1
var
mas : array of integer; //массив содерж элементы
i , count , result : integer; //счетчик и кол-во элементов
begin
repeat //ввод массива
writeln('Enter the element count>0');
readln(count);
until count > 0 ;
setlength(mas , count);
for i := 0 to count-1 do
begin
writeln('Enter ',i+1,' element');
readln(mas[i]);
end;
for i := 0 to count-1 do
begin
write(mas[i],' ');
end;
asm
xor ebx , ebx //смещение текущего элемента относительно начала массива
mov ecx , count //количество проходов цикла
@m1:
cmp mas[ebx] , 0 //сравниваю текущий элемент на 0
je @ok //если 0 то переходим на метку 0
add ebx , 4 //если увеличиваем смещение элемента
cmp ecx , 1 //проверка если не будет 0 в массиве
je @_ok
loop @m1
@ok:
mov result , 1
jmp @exit
@_ok:
mov result , -1
@exit:
end;
writeln;
writeln(result);
readln;
end.
Sha (2007-04-01 23:48:00) [1]ebx сохранять надо, см. хелп.
можно примерно так:
procedure TForm1.Button1Click(Sender: TObject);
var
mas: array of integer;
res, len: integer;
begin
len:=3;
SetLength(mas,len);
mas[0]:=0; mas[1]:=1; mas[2]:=2;
asm
mov edx,mas
mov eax,len
@next:
add eax,-1
jl @done
cmp [edx+4*eax],0
jne @next
mov eax,1
@done:
mov res,eax
end;
ShowMessage(IntToStr(res));
end;
sat (2007-04-01 22:15:00) [2]попробывал дело не в регистрах
мне кажется что главная проблемма в сравнении cmp mas[ebx] , 0 почему то когда элемент массива 0 не переходит на метку
Alexey (AZ) (2007-04-01 19:01:00) [3]Не совсем ясна задача, но попробую предположить что нужно сохранить регистры на входе и восстановить на выходе.
asm PUSHAD end;
и
asm POPAD end;
Сохранит все регистры, но из того что используется надо сохранять только EBX поэтому можно сделать проще:
asm push ebx end;
&
asm pop ebx end;