Студентам с вопросами о лабораторных работах сюда

Тема в разделе "WASM.BEGINNERS", создана пользователем IceStudent, 11 ноя 2006.

  1. naidgel

    naidgel New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2008
    Сообщения:
    4
    Помогло
    tasm /m $f$
    tlink /x /3 $f$
     
  2. Den4X

    Den4X New Member

    Публикаций:
    0
    Регистрация:
    1 янв 2008
    Сообщения:
    5
    Предсмертная просьба о помощи.
    Конечно интересно мне ответили почитай книжки, глаза вылазят, начитался уже.
    Короче ничё с библиотекой не получилось, не потому что я даун, читаю, а мне как жирафу не доходит, а из-за маленькой ёб...ной проблемки. TASM не хавает OpenGL.lib masma, а своего у него в комплекте нету, и во всём и-нете нет. Зато примеров на TASM с его использованием туева хуча. Сразу говорю утилка implib создаёт такоой мааалюсенький файлик который не пашет, так что если кто-то как-то писал OpenGL на TASMe буду до гроба благодарен за помощь. Спасибо.
     
  3. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Если исходники не в режиме ideal, можешь спокойно использовать MASM.
     
  4. as

    as New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2008
    Сообщения:
    1
    Здравствуйте. У меня такие вопросы.
    Нужно написать на ассесблере программу, для вычисления факториала.
    Мой вариант такой, но он вроде не правильный:
    Код (Text):
    1. function Factorlorg (I: Extended):Extended;
    2.   assembler;
    3.   asm
    4.   MOV DX,0 
    5.   MOV BX,0 
    6.   MOV CX,1 
    7.   MOV AX,1 
    8. @@CIKL:    
    9.   MUL CX   
    10.   MOV DI,AX
    11.   MOV AX,BX
    12.   MOV BX,DX
    13.   MUL CX
    14.   ADD BX,AX
    15.   MOV AX,DI
    16.   LOOP @@CIKL  
    17.   MOV DX,BX
    18. END;
    19.  
    20. Begin
    21.   Factorlorg(5);
    22. end.
    И второй вопрос, что делает следующий код:

    Код (Text):
    1. unit AltMouse;
    2.  
    3. interface
    4.  
    5. procedure InitMouse;
    6. procedure ReadMouse(var b1,b2,b3: byte; var x,y: word);
    7.  
    8. implementation
    9.  
    10. procedure InitMouse; assembler;
    11. asm
    12.   xor   ax,ax
    13.   int   33h
    14. end;
    15. procedure ReadMouse(var b1,b2,b3: byte; var x,y: word);
    16. var tx,ty: word;
    17.     k1,k2,k3: byte;
    18. begin
    19.   asm
    20.   mov   ax,3
    21.   int   33h
    22.   mov   _x,cx
    23.   mov   _y,dx
    24.   mov   k1,bl
    25.   mov   k2,bl
    26.   mov   k3,bl
    27.   and   k1,1b
    28.   and   k2,10b
    29.   and   k3,100b
    30.   end;
    31.   x:=tx;
    32.   y:=ty;
    33.   b1:=k1;
    34.   b2:=k2;
    35.   b3:=k3;
    36. end;
    37.  
    38. begin
    39. end.
     
  5. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Процедура для факториала не вроде, а точно неправильная. Посмотри по форуму, пробегали процедуры для нахождения факториала. Вторые процедуры-можно догадаться по названию - сброс и чтение координат мыши соответственно.
     
  6. Irresistable

    Irresistable New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2008
    Сообщения:
    3
    Всем привет!
    Помогите бедному студенту...=)
    Мне нужно реализовать тест Рабина-Миллера(проветка числа на простоту) на асме.
    Ничего толком найти не смог, кроме реализаци на паскале((( http://program.rin.ru/razdel/html/620.html

    Описание алгоритма сдесь http://ru.wikipedia.org/wiki/Тест_Миллера-Рабина
    Краткое описание:
    Выбераем для проверки случайное число p. Вычисляем b - число делений p-1 на 2(т.е., 2^b - это наибольшая степень числа 2, на которое делится p-1). Затем вычисляем m, такое что p=1+2^b*m.
    1) Выбераем случайное число a, меньшее p.
    2) Устанавливаем j=0 и z=am mod p.
    3) Если z=1 или z=p-1, то p проходит проверку и может быть простым числом.
    4) Если j>0 и z=1, то p не является простым числом.
    5) Устанавливаем j=j+1. Если j<b и z(p-1, устанавливаем z=z^2 mod p и вернемся на этап (4). Если z=p-1, то p проходит проверку и может быть простым числом.
    6) Если j=b и z<>p-1, то p не является простым числом.
    Буду крайне презнателен за помощь.
     
  7. Den4X

    Den4X New Member

    Публикаций:
    0
    Регистрация:
    1 янв 2008
    Сообщения:
    5
    Наверно, вопрос глупый, но забыл.
    У меня функция в DLL библиотеке (на MASM32), которая вызывается из VB 6.0.

    В eax есть значение.
    Как вернуть это значение назад в VB.
    По идее ret eax, но компилятор ругается.
    Нужно ли в .def файле в EXPORTS прописывать кроме имени функции, что она принимает и отдаёт параметры, если да, то как?
     
  8. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    Irresistable
    Могу скинуть свой код из лабы. Реализовывал RSA128. есть тест Миллера-Рабина и тест на числа Кармишеля.
    P.S. Но код на Delphi. Правда все функции вплоть до (включительно) i128_mod в настроенном ассемблере. А остальные максимально приближены к нему - перенос не систавит никаких проблем- сам хотел его сделать, но не успел - лабу сдал и забыл. Если нужно - напиши, скину.
    procedure i128_set0(var a : TInt128; max : DWORD = 0);
    procedure i128_set(var a : TInt128; num : DWORD); overload;

    function i128_add(var a : TInt128; num : DWORD) : byte; overload;
    function i128_add(var a, b : TInt128) : byte; overload;

    function i128_sub(var a : TInt128; num : DWORD) : byte; overload;
    function i128_sub(var a, b : TInt128) : byte; overload;

    function i128_inc(a : TInt128) : TInt128;
    function i128_dec(a : TInt128) : TInt128;

    function i128_nz(var a : TInt128) : boolean;
    function i128_cmp(const a : TInt128; num : DWORD) : integer; overload;
    function i128_cmp(const a, b : TInt128) : integer; overload;

    function i128_shr(var a : TInt128; num : BYTE) : byte;
    function i128_shl(var a : TInt128; num : BYTE) : byte;

    procedure i128_or(var a, b : TInt128); overload;
    procedure i128_or(var a : TInt128; num : DWORD); overload;

    function i128_mul(var a, b : TInt128) : TInt128;
    function i128_mod(var a, b : TInt128) : TInt128;

    function i128_get(i0, i1, i2, i3 : DWORD) : TInt128;
    function i128_tostr(const a : TInt128) : string;

    // Функции, используемые в RSA
    function i128_rnd(var max : TInt128) : TInt128;

    function i128_gcd(var a, b : TInt128) : TInt128;
    function i128_mod_pow(var num, pow, module : TInt128) : TInt128;

    function i128_simple_random(var m : TInt128) : boolean;
    function i128_Karmishel(var num : TInt128) : boolean;

    function i128_simple_MullerRabin(var m : TInt128) : boolean;
     
  9. zet

    zet New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2007
    Сообщения:
    121
    mov eax, ...
    ...
    ret
     
  10. Irresistable

    Irresistable New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2008
    Сообщения:
    3
    Xerx
    Спасибо!
    Пожалуйста, если не составит труда. Просто я делфи вообще не знаю((
    Я вчера реализировал алгоритм на с++, а вот насчет перенести на асм - сложно...
     
  11. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    Надеюсь поможет чем. Если будут вопросы - пиши.

    P.S. Работа с int128 на встроенном ассемблере: основной набор функций (+, -, *, /, mod, rnd), функции для RSA (возведение в степень по модулю, тест простоты Мюллера-Рабина) и т.п... (см. мой пост #548)
     
  12. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.551
    Адрес:
    Russia
    zet
    Кто ж так объясняет

    Den4X
    Если у тебя возвращаемое значение в eax то делай ret без параметров. И если функция умеет возвращать значения (а не void) то все вернется в переменную при вызове:

    MyVar = MyAsmFunction();

    (PS: но во многом зависит от компилятора)
     
  13. dzensearcher

    dzensearcher New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    2
    Помогите плз
    Нужна простенькая программа на ASM
    Требуется чтобы при нажатии любого символа на клавиатуре печатался на экран символ и происходил первод строки
     
  14. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    dzensearcher
    что конкретно не получается?
     
  15. dzensearcher

    dzensearcher New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    2
    Не получается в том что у меня оч мало времени ((
    2 суток я не успеваю просто въехать что и как
    читаю калашникова сейчас
     
  16. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    dzensearcher
    У вас было порядка полугода (семестр)
     
  17. technik5

    technik5 New Member

    Публикаций:
    0
    Регистрация:
    12 сен 2007
    Сообщения:
    19
    оффтопик, но если асм сам не сдашь, то лучше его сам провали, а потом досдашь летом....
     
  18. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.551
    Адрес:
    Russia
    technik5
    Глупо. Вдруг повезет. (таким как он - надо сдать а не въехать в асм). Так что лучше вначале выкрутиться
     
  19. Irresistable

    Irresistable New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2008
    Сообщения:
    3
    Друзья, помогите кто может и кому не лень!
    Реализовал(правда карявенько и примитивно) на с++ тест Рабина-Миллера на простоту числа
    Помогите перевести на асм
    Код (Text):
    1. #include "stdlib.h"
    2. #include "conio.h"
    3. #include "math.h"
    4. #include "iostream.h"
    5.  
    6. void main()
    7. {
    8. cout<<"Rabin-Miller test"<<endl;
    9. cout<<endl;
    10. cout<<"Ener number for testing"<<endl;
    11. int p;
    12. char result;
    13. cin>>p;
    14.  
    15. int r=1;
    16. while(pow(2,r)<=p)
    17. {
    18.   r++;
    19. }
    20.  
    21. for (int i=0; i<r; i++)
    22. {
    23.   int a=rand()%(p-2);
    24.   _div_t my_div = div(pow(a,p-1), p);
    25.   int term = my_div.rem;
    26.  
    27.   if(term!=1 || term!=-1)
    28.       result='N';
    29.   else
    30.       result='Y';
    31. }
    32. cout<<result<<endl;
    33. getch();
    34. }
     
  20. Masya

    Masya New Member

    Публикаций:
    0
    Регистрация:
    23 янв 2008
    Сообщения:
    2
    задание на лабораторную работу:
    1. написать программу для передачи файлов с одного компа на другой через сом-порт по 0-модемному кабелю
    2. прогамма которая печатает текст на принтер и при всрече пустой строки печатать
    0==============================================>