Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.05.2012, 19:47   #1
panter
Новичок
Джуниор
 
Регистрация: 10.05.2012
Сообщений: 2
По умолчанию Ассемблерная вставка

Задание: определить является ли заданное число простым. Программа работает не правильно с асемблерной вставкой. Явных ошибок во вставке не вижу. Может быть вы увидете? заранее спасибо
Среда: Virtual Pascal


Код:
Program aaa;
var n,i:integer;
f:boolean;
begin
Writeln('введите число');
readln(n);


//f:=false;
asm
     mov Byte Ptr f,0
//for i:=2 to round(sqrt(n)) do
     movsx eax,Word Ptr n
     mov [ebp-4],eax
     fild DWord Ptr [ebp-4]
     fsqrt
     sub esp,8
     mov si,ax
     mov Word Ptr i,2
     jmp @n1
//if n mod i=0 then
  @n3:   movsx eax,Word Ptr n
     movsx ecx,Word Ptr i
     cdq
     idiv ecx
     test edx,edx
     jne @n2
//f:=true;
     mov Byte Ptr f,1
  @n2:   inc Word Ptr i
  @n1:   cmp si,i
     jge @n3

end;

if f then writeln('составное') else writeln ('простое');
readln;
end.
panter вне форума Ответить с цитированием
Старый 10.05.2012, 21:43   #2
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
mov [ebp-4],eax
а куда это вы здесь адресуетесь?) особенно если учесть, что стек в данный момент пуст...
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 10.05.2012, 21:55   #3
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Код:
f: integer;

asm
     MOV edx, 1
     MOV ebx, [n]
     FILD DWORD PTR [n]
     FSQRT
     FISTP DWORD PTR [n]

     MOV ecx, [n]

align 16     
@n1:
     CMP ecx, 2
     JB @n2

     MOV eax, ebx
     XOR edx, edx
     DIV ecx
     
     SUB ecx, 1
     AND edx, edx
     JNZ @n1

@n2:
     MOV [f], edx

end;

if (f=0) then writeln('составное') else writeln ('простое');

Последний раз редактировалось f.hump; 10.05.2012 в 21:58.
f.hump вне форума Ответить с цитированием
Старый 10.05.2012, 22:41   #4
panter
Новичок
Джуниор
 
Регистрация: 10.05.2012
Сообщений: 2
По умолчанию

Спасибо большое, задачка решена))
panter вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ассемблерная вставка на Си faop Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 11.03.2011 11:03
Ассемблерная вставка _-Re@l-_ Паскаль, Turbo Pascal, PascalABC.NET 5 18.09.2010 14:31
Ассемблерная вставка! treki Помощь студентам 0 16.06.2010 00:15
Ассемблерная вставка Arigato Общие вопросы Delphi 1 25.10.2009 21:47