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

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

  1. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    censored
    Немец видимо. Fakultaet <=> факториал.
     
  2. assembler_freak

    assembler_freak New Member

    Публикаций:
    0
    Регистрация:
    10 дек 2007
    Сообщения:
    9
    да факториал)
     
  3. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    assembler_freak
    И в чем проблемы?
    Формула проста до безобразия: n! = 1 * 2 * ... * n
     
  4. assembler_freak

    assembler_freak New Member

    Публикаций:
    0
    Регистрация:
    10 дек 2007
    Сообщения:
    9
    spasibo za formulu, no mne nuzhen code dlya assemblera
     
  5. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    assembler_freak
    Код (Text):
    1.                         mov     ecx, N
    2.                         mov     eax, 1
    3. __f:                   imul    eax, ecx
    4.                         dec     ecx
    5.                         jnz     __f
     
  6. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    censored
    А я бы так предложил
    Код (Text):
    1. xor edx, edx
    2. mov eax, 1
    3. mov ecx, 5 ;factor
    4. loop1:
    5. mul ecx
    6. loop loop1
    7. mov res, eax
     
  7. Luarvic

    Luarvic New Member

    Публикаций:
    0
    Регистрация:
    11 дек 2007
    Сообщения:
    2
    Нужно поделить слово на байт, результат(AL) кинуть в слово. Делаю так:
    Код (Text):
    1. DSEG  SEGMENT  PARA  PUBLIC  "DATA"
    2. slovo dw ?
    3. bait db ?
    4. ...
    5. MOV AX, 8
    6. MOV bait, 3
    7. DIV bait
    8. MOV bait,AL
    9. MOV BX,WORD PTR bait
    10. MOV slovo,BX
    11. CALL digit; процедура вывода результата на 100% рабочая, число берет из slovo
    12. ...
    Получаю результат: 3330
    Вопрос что не так и как бы все это можно по умнее (покороче) записать.
    И еще если есть готовая процедура ввода знакового целого числа, буду очень благодарен!
     
  8. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Luarvic
    Косяк тут
    Код (Text):
    1. MOV BX,WORD PTR bait
    2. MOV slovo,BX
    Ты ссылаешься на байт как на WORD. А в старшем байте я не знаю что находиться, видимо ...
    IMHO проще.
    Код (Text):
    1. MOV AX, 8
    2. MOV BL, 3
    3. DIV BL
    4. XOR AH, AH ;обнуляем остаток.
    5. MOV slovo,AX
     
  9. Luarvic

    Luarvic New Member

    Публикаций:
    0
    Регистрация:
    11 дек 2007
    Сообщения:
    2
    Решил проблему так:
    Код (Text):
    1. MOV BX,WORD PTR bait
    2. MOV BH, 0
    3. MOV slovo,BX
    Спасибо. 2-й день разбираюсь, вылетела из головы связь между BX, BH, BL
     
  10. assembler_freak

    assembler_freak New Member

    Публикаций:
    0
    Регистрация:
    10 дек 2007
    Сообщения:
    9
    спасибо, буду разбираться
     
  11. Holy_Storm

    Holy_Storm New Member

    Публикаций:
    0
    Регистрация:
    10 дек 2007
    Сообщения:
    2
    Всем известна задача про ханойские башни. Число дисков 10, данные вывести надо в файл. Помогите, пжл, перевести паскалевский код на асм (Tasm 5.0), или подсказать с чего начать основную процедуру, с файлом сам разберусь:
    Код (Text):
    1. Program Hanoy;
    2. Const  k=10;
    3. Var
    4. a,b,c : Char;
    5. a1,b1,c1,s: Integer;
    6. fil:text;
    7.  
    8. Procedure Disk(n : Integer; a, b, c: Char);
    9. Begin
    10.  If n>0 Then
    11.  Begin
    12.   Disk(n-1,a,c,b);
    13.   Writeln(fil,'Диск ',n, ' переложить c ', a, '->', b);
    14.   If a='3' Then c1:=c1-1;
    15.   If a='2' Then b1:=b1-1;
    16.   If a='1' Then a1:=a1-1;
    17.   If b='3' Then c1:=c1+1;
    18.   If b='2' Then b1:=b1+1;
    19.   If b='1' Then a1:=a1+1;
    20.   Writeln(fil,b1,' ',a1,' ',c1);
    21.   Disk(n-1,c,b,a);
    22.   s:=s+1;
    23.  End;
    24. End;
    25.  
    26. Begin
    27. Assign (fil,'hanoy.txt');
    28. Rewrite(fil);
    29. a1:= 0; b1:= 0; c1:= k;
    30. a:= '3'; b:= '2'; c:= '1';
    31. Disk(k,a,b,c);
    32. Append(fil);
    33. Writeln(fil,'Количество перестановок ', s);
    34. Close(fil);
    35. Writeln('Данные сохранены в файле Hanoy.txt...Нажмите клавишу Enter...');
    36. ReadLn;
    37. End.
    Вот сегодня пытался решить на асме, но после запуска в дебугере программа зависает, быть может проблемы со стеком? Подскажите, пожалуйста:)
    Код (Text):
    1. masm
    2. .model small
    3. .486
    4. .stack 30h
    5.  
    6. .data
    7.  str1 db 'Программа успешно отработала$'    
    8. .code
    9.  
    10.  Hanoy proc
    11.     push ebp
    12.     mov ebp, esp
    13.    
    14.     cmp EDX, 1
    15.     JNE _else
    16.     JMP done
    17. _else:
    18.     mov eax, 6            ; eax=6
    19.     sub eax, ebx          ; eax=6-b
    20.     sub eax, ecx          ; eax=6-b-c
    21.     mov [esp+4], eax      ; a=eax
    22.  
    23.     push eax              ; начало процедуры (n-1, b,a)
    24.     mov eax, ebx          ; eax=b
    25.     push eax              ; в стек b
    26.     mov eax, edx          ; eax=n
    27.     dec eax               ; eax=n-1
    28.     push eax              ; в стек n
    29.     call hanoy            ; вызов процедуры (n-1, b,a)
    30.     pop eax
    31.     xor eax, eax
    32.  
    33.     mov eax, ecx          ; начало процедуры (n, b,c)
    34.     push eax              ; в стек c
    35.     mov eax, ebx          ; eax=b
    36.     push eax              ; в стек b
    37.     push edx              ; в стек n
    38.     call hanoy            ; вызов процедуры (n, b,c)
    39.     pop eax
    40.     xor eax, eax
    41.  
    42.     mov eax, ebx          ; начало процедуры (n-1, a,b)
    43.     push eax              ; в стек b
    44.     mov eax, [esp+4]      ; eax=a
    45.     push eax              ; в стек a
    46.     mov eax, edx
    47.     dec eax               ; eax=n-1
    48.     push eax              ; в стек n-1
    49.     call hanoy
    50.     pop eax
    51.     xor eax, eax
    52.     ;add esp, 12
    53.     inc si                ; число перестановок
    54. done: leave
    55.     ret
    56. Hanoy endp
    57.  
    58. start:
    59.         mov ax, @data
    60.     mov ds, ax
    61.  
    62.     mov ebx, 2
    63.     mov ecx, 1
    64.     mov edx, 10
    65.  
    66.     call Hanoy
    67.  
    68.     mov ah, 09h
    69.     mov dx, offset str1
    70.     int 21h
    71.    
    72.     mov AH, 10h
    73.     int 16h
    74.  
    75.     mov ah, 4ch
    76.     int 21h
    77.    
    78. end start
     
  12. ANTONYEXBX

    ANTONYEXBX New Member

    Публикаций:
    0
    Регистрация:
    12 дек 2007
    Сообщения:
    2
    Помогите написать Лабораторную работу!
    Вот задание Лабораторной работы

    Написать программу, непрерывно устанавливающую атрибут «белые символы на черном фоне» для каждого символа на экране.

    Заранее Благодарен!
     
  13. unforgiven

    unforgiven New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2007
    Сообщения:
    18
    Информация о дискете

    мне нужно написать прогу, которая проверяет наличие дискеты в приводе
    и если дискета есть, то вывести информацию о ней:кол-во сторон, кол-во дорожек, кол-во слотов на дорожке

    Код (Text):
    1. .model small
    2. .stack 100h
    3. .data
    4.    
    5.     a dw 0
    6. .code
    7. start:
    8.     mov ax,@data
    9.     mov ds,ax
    10.  
    11.     mov ah,32h
    12.     mov dl,1
    13.     int 21h
    14.     ;конец
    15.     cmp al,0
    16.     jnz exit
    17.  
    18. exit:
    19. mov ax,4c00h
    20. int 21h
    21. end start
    22. end
    проверку на вставленность дискеты сделал. а остальное не могу =/

    помогите плизз...
     
  14. Rakot

    Rakot New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2007
    Сообщения:
    1
    Объясните пожалуйста что такое 25h - установка вектора прерывания и int 70h - прерывание часов реального времени. Смысл применения и метод работы, еще бы желательно пример программы с использованием функций
     
  15. DurA

    DurA New Member

    Публикаций:
    0
    Регистрация:
    6 дек 2007
    Сообщения:
    7
    От.. В лабе по СИ 4 задачи.. с тремя я мало мальски выкрутилась.. а вот с это вообще застряла...
    Дано N, x (N)
    Найти: МАКС элемент массива. все элементы расположенные до МАКС упорядочить по возрастанию, а все эл-ты расположенные после МАКС по убыванию... использовать метод выбора...
    Вот код, который писался утром с бодунища... Сам "писатель" вообще пропал... А что делать с этим? То что оно не работает я знаю...

    Код (Text):
    1. #include <vcl.h>
    2. #include <conio.h>
    3. #include <iostream.h>
    4. #pragma hdrstop
    5.  
    6. #pragma argsused
    7. int main(int argc, char* argv[])
    8. {
    9. int max=0, maslength=0, maxindex=0;
    10. cout << "Input Massive Length > ";
    11. cin >> maslength;
    12. int *mas = new int[maslength];
    13. randomize();
    14. for (int i=0; i < maslength; i++) {
    15. int numb = random(1000);
    16. mas [i] = numb;
    17. if (max < numb) {max = numb; maxindex=i;};
    18. };
    19. int *unsortmas = new int[maslength];
    20.  
    21. for (int i=0; i < maslength; i++) {
    22. unsortmas[i]=mas[i];
    23. }
    24.  
    25. for (int i=0; i < maxindex; i++) {
    26. for (int j=i; j < maxindex; j++) {
    27. if (mas[i]>mas[j]){
    28. int temp=mas[i];
    29. mas[i]=mas[j];
    30. mas[j]=temp;
    31. }
    32. }
    33. }
    34.  
    35. for (int i=maxindex+1; i < maslength; i++) {
    36. for (int j=i; j < maslength; j++) {
    37. if (mas[i]<mas[j]){
    38. int temp=mas[i];
    39. mas[i]=mas[j];
    40. mas[j]=temp;
    41. }
    42. }
    43. }
    44.  
    45. cout << "\nUnsorted: ";
    46. for (int i=0; i < maslength; i++) {
    47. cout << unsortmas[i] << ' ';
    48. }
    49. cout << "\nSorted: ";
    50. for (int i=0; i < maslength; i++) {
    51. cout << mas[i] << ' ';
    52. }
    53. cout << "\nMaxIndex = " << maxindex+1 << "\nMax = " << max << "\nPress Any Key To Contunue...";
    54. getch();
    55. return 0;
    56. }
     
  16. hiiamnoob

    hiiamnoob New Member

    Публикаций:
    0
    Регистрация:
    5 май 2007
    Сообщения:
    22
    вот такие 2 лабы (полностью на асьме или паскаль со вставками)
    1)сделать чтобы экран был из разного цвета прямоугольников квадратов и на переднем плане летало 4-х значное число (не могу понять как вообще реализовать)
    2)произвести чтение , запись файла(ов) с(на) флопи
    не как не могу понять как реализовать...
     
  17. Daman

    Daman New Member

    Публикаций:
    0
    Регистрация:
    18 дек 2007
    Сообщения:
    1
    Помогите написать прогу:
    дан двумерный массив чисел, отсортировать каждую строку по возрастанию любым сп-м...
    написать необходимо под масм...
    Ооооочень срочно...!
     
  18. fanat1k

    fanat1k New Member

    Публикаций:
    0
    Регистрация:
    18 дек 2007
    Сообщения:
    2
    Не буду оригинальным, тоже прошу помочь с программами для универа :)
    Возможно кто-то такие уже делал и сможет скинуть, либо написать, буду премного благодарен

    Формулировки задач:
    1. Предмет: Методы трансляции

    Задачи
    1а. Удаление эпсилон правил и цепных правил. Делать на
    Паскале, либо на Visual C.

    1б. Нисходящий разбор. Тоже либо на Pascal, либо Visual C.

    2. Предмет: Мат. основы машинной графики

    Задачи
    2а. Обязательно на Visual C#(си шарп) написать программу, рисующую заданный
    график (например cosX), с возможностью приближения,
    отдаления(масштабирования),сдвига графика вправо-влево, вверх-вниз по осям.

    2б. Нарисовать в 3D пр-ве кубик, у которого можно менять соотношение сторон , и
    который можно вращать в 3 измерениях и вращать относительно начала координат.
    Изначально кубик одной из вершин находится в 0,0,0, рёбра - по осям. Тоже на
    Visual C.
     
  19. fanat1k

    fanat1k New Member

    Публикаций:
    0
    Регистрация:
    18 дек 2007
    Сообщения:
    2
    1а, 2а, 2б нашёл

    если кто сделает 1б, буду рад)
     
  20. Yep

    Yep New Member

    Публикаций:
    0
    Регистрация:
    20 дек 2007
    Сообщения:
    11
    задание такое: проверить, можно ли из строки введенных символов составить слово begin.
    вот что смог сделать сам:
    Код (Text):
    1. model tiny
    2.  
    3. codes SEGMENT para 'CODE'
    4. assume cs:codes, ds:codes, es:codes, ss:codes
    5. org 100h
    6. begin: JMP main ;переход на метку main
    7.      yep db 10,13,'All Ok$'
    8.      nope db 10,13,'Oh shi--$'
    9.      inp db 6,6,6 dup(?) ;вводится только 5 символов
    10.      str_end = $;
    11.      str_len = str_end - offset inp ; длина вводимой строки
    12.      mov cl, 0 ;обнуляем сумму
    13.      mov bl, 0 ;обнуляем счетчик итераций
    14.      
    15. summ: ; накапливается сумма совпадений с cl
    16.      inc cl ;добавляем сумму
    17.      cmp cl, 5 ; если сумма совпадений равна 5
    18.      je exit ; то идем на выход
    19. err_: ; в том случае если кончились символы, но совпадений меньше чем надо
    20.      cmp bl, offset str_len ; сравниваем кол-во итераций с кол-вом символов
    21.      je oshibka ; если совпадает то идем на err
    22.      jmp compare ; если нет то берем следующий символ
    23.      
    24. main:
    25.      cld ;сбрасывает флаг направления в о (df) далее инкремент si и di
    26.      
    27.      mov AH,0Ah ;ввод строки с клавиатуры          
    28.      mov dx, offset inp
    29.      int 21h
    30.      mov SI, offset inp     ;Адрес введенной строки в SI
    31.      
    32. Compare: ;тут происходит сравнение очередного символа с каждой буквой из слова begin
    33.      inc bl ; добавляем 1, что проходит очередной символ
    34.      lodsb   ;берет очередной символ символ из строки и помеает его в al. si увеличивается
    35.      cmp al, 'b'
    36.      je summ ; если равны
    37.      cmp al, 'e'
    38.      je summ ; если равны
    39.      cmp al, 'g'
    40.      je summ ; если равны
    41.      cmp al, 'i'
    42.      je summ ; если равны
    43.      cmp al, 'n'
    44.      je summ ; если равны
    45.      jmp err_
    46.      
    47.      oshibka:
    48. ;_____проверка_________
    49. mov ah, 02h ; вывод al
    50. mov dl, al
    51. int 21h
    52.  
    53. mov ah, 02h ; вывод bl
    54. mov dl, bl
    55. int 21h
    56. ;______кнец проверки_____
    57.  
    58.      mov ah,09h
    59.      mov dx,offset nope ; при ошибке
    60.      int 21h
    61.      
    62.      mov ah,4ch
    63.      int 21h
    64.      jmp endw
    65.      
    66.      exit:
    67.      mov ah,09h
    68.      mov dx,offset yep
    69.      int 21h
    70.      
    71.      mov ah,4ch
    72.      int 21h
    73.      endw:
    74. codes ends
    75.  
    76.  
    77. end begin
    я вообще правильно делаю? если правильно то где ошибка?