Форум: "Начинающим";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];
Внизвставка на ассемблере Найти похожие ветки
← →
sat © (2007-04-01 18:16) [0]помогите отладить пожалуйста вставку в 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.
← →
Alexey (AZ) (2007-04-01 19:01) [1]Не совсем ясна задача, но попробую предположить что нужно сохранить регистры на входе и восстановить на выходе.
asm PUSHAD end;
и
asm POPAD end;
Сохранит все регистры, но из того что используется надо сохранять только EBX поэтому можно сделать проще:
asm push ebx end;
&
asm pop ebx end;
← →
sat © (2007-04-01 22:15) [2]попробывал дело не в регистрах
мне кажется что главная проблемма в сравнении cmp mas[ebx] , 0 почему то когда элемент массива 0 не переходит на метку
← →
Sha © (2007-04-01 23:48) [3]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;
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.04 c