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

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

  1. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Так посмотри в масме, есть библиотека masmlib кажется называется, и дока по ней там есть. Так что лучше разберись с ней, там ещё много чего полезного.
     
  2. PaCHER

    PaCHER New Member

    Публикаций:
    0
    Регистрация:
    25 мар 2006
    Сообщения:
    852
    Sver4koff
    Та епты. Поиском в этомдже топе поищи вывод на экран уже 1000 раз обсуждалось. Неговоря уже про форум в целом.
     
  3. Sver4koff

    Sver4koff New Member

    Публикаций:
    0
    Регистрация:
    26 фев 2007
    Сообщения:
    13
    мда... мою ситуацию Воланд очень хорошо описал чуть выше (лекции повехностно, только под дос, а курсач по полной програме под винду)
    вот сижу и хз как его и что его.

    буду рад если кто носом ткнет, покажет и расскажет как оно работает и как его провильно вставить в текст проги которую Y_Mur чуть выше написал.

    на форуме нашел нужные темы:
    http://wasm.ru/forum/viewtopic.php?pid=129540#p129540
    http://www.wasm.ru/forum/viewtopic.php?pid=154211#p154211

    пытаюсь разобраться сам, но от етого толку не много так как многих основ даже не знаю и оно жрет часы времени бестолку...

    хелп...
     
  4. Sver4koff

    Sver4koff New Member

    Публикаций:
    0
    Регистрация:
    26 фев 2007
    Сообщения:
    13
    PaCHER
    спасибо!!! думал что линк "Поиск" это как элемент дизайна сайта! :)))
     
  5. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Sver4koff
    Вчерашниний пример в консоли

    FreeManCPM
    В 9х GetFileSize без корректной ссылки на Hi_Size не пашет в принципе, в ХР это кажись пофиксили, но мало ли кому какой файл слепить в голову придёт :))
     
  6. Sver4koff

    Sver4koff New Member

    Публикаций:
    0
    Регистрация:
    26 фев 2007
    Сообщения:
    13
    спасибо Y_Mur! не пожалел времени, спас студента, спасибо!
    один глюк наблюдается... в консоли пишет:
    2561 bytes
    а в броузере:
    4294967295 bytes


    вот твой текст проги. я немного поправил - добавил заголовок для вывода в браузер
    Код (Text):
    1. comment * «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    2.  
    3.                          Build this example with
    4.  
    5.                       >> Console Assemble & Link <<
    6.  
    7. ; ««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««« *
    8.  
    9.     .486
    10.     .model flat, stdcall
    11.     option casemap :none   ; case sensitive
    12.  
    13. ; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    14.  
    15.     include \masm32\include\windows.inc
    16.     include \masm32\include\kernel32.inc
    17.     include \masm32\include\user32.inc
    18.  
    19.     includelib \masm32\lib\kernel32.lib
    20.     includelib \masm32\lib\user32.lib
    21.  
    22. .data
    23.   zsFileName    db 'File.asm', 0
    24.   szFormat  db 'Size of file "%s" = %u : %u bytes', 0
    25.   html_header    db 'Content-Type: text/html',13,10,13,10,0
    26. ; Прим: при запуске через *.bat файл русские буквы отображаются в дос кодировке, поэтому использована английская надпись
    27. ; при перенаправлении консольного вывода в файл или браузер можно использовать любую кодировку:
    28. ;  szFormat db 'Размер файла "%s" = %u : %u байт', 0
    29.  
    30. .data?
    31.   h_Std_Out dd ?    ; Handle консольного вывода
    32.   h_File    dd ?    ; Handle файла
    33.   N_wr      dd ?    ; Количество байт удачно выведенных на консоль (или в файл)
    34.   Lo_Size   dd ?    ; Размер файла 64 битный
    35.   Hi_Size   dd ?
    36.   OutBuf    db 255 dup (?) ; промежуточный буфер для текста
    37.   SizeOutBuf    dd ?    ; размер текста записанного в OutBuf
    38. .code
    39.  
    40. start:
    41.  
    42. ; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    43.    
    44.     ; Открыть тестируемый файл
    45.     invoke CreateFile, addr zsFileName, 0, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0
    46.     mov [h_File], eax
    47.     invoke GetFileSize, eax, addr Hi_Size   ; Определить его размер
    48.     mov [Lo_Size], eax
    49.     invoke CloseHandle, [h_File]        ; Закрыть файл
    50.  
    51.     ; Вывод информацци в промежуточный буфер
    52.     invoke wsprintf, addr OutBuf, addr szFormat, addr zsFileName, Hi_Size, Lo_Size
    53.     mov [SizeOutBuf], eax
    54.    
    55.     ; Вывод информации из промежуточного буфера на консоль
    56.     invoke GetStdHandle, STD_OUTPUT_HANDLE  ; Открыть консоль для вывода информации
    57.     mov [h_Std_Out], eax
    58.     ; вывод заголовка
    59.     invoke    lstrlen,addr html_header
    60.     invoke    WriteFile,[h_Std_Out],addr html_header,eax,addr N_wr,0
    61.     ; конец вывода заголовка
    62.     invoke WriteFile, [h_Std_Out], addr OutBuf, [SizeOutBuf], addr N_wr, 0
    63.     invoke CloseHandle, [h_Std_Out]     ; Закрыть консоль
    64.    
    65.     invoke ExitProcess, 0   ; завершаем программу    
    66. ; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    67.  
    68. end start
    Y_Mur, а что значит Size of file "%s" = %u : %u bytes. это Hi : Lo size как я понял?
     
  7. nitrotoluol

    nitrotoluol New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2006
    Сообщения:
    848
    Имеется любое число, например:

    1,1718 (десятичное)

    Используя АСМ (32х битный), преобразовать десятичную дробь в натуральную.

    Примечание1: Требуется функция, входные параметры которой вы задаете как вам удобно, а на выходе в регистре esi должен быть числитель, а в edi - знаменатель.

    Дополнительное задание: Написать еще 2 функции, которые будут использовать различные способы преобразования десятичной дроби в натуральную.
    -------------------------------------------------------------------------------------

    Шок вызвало дополнительное задание.

    Т.е. я вижу алгоритм так:

    Способ1:
    1. Получаем число знаков после запятой
    2. Умножаем числитель на 100..0 (в зависимости от числа знаков), а в знаменатель пишем соответственно то, на что умножаем числитель.
    3. А дальше сокращаем числитель и знаменатель до упора.

    Но это очевидно:

    10,8 = 10,8 * 10 /10 = 108 /10 = 54 / 5

    А как еще можно привести к натуральной дроби??? Да еще и 2мя способами??

    И вход мне как организовать? я ж в еах не забью 1,1718.

    Вообщем хелп ми.

    Нужно:
    1) Просто мат. алгоритм по преобразованию десятичных дробей в натуральные
    2) Как лучше организовать вход (я так понимаю тут FPU заюзать нужно... )
     
  8. Sver4koff

    Sver4koff New Member

    Публикаций:
    0
    Регистрация:
    26 фев 2007
    Сообщения:
    13
    Y_Mur
    по поводу разных чисел забей... :) я по невнимательности не положил File.asm в каталог вместе с екзешником на серваке

    Все работает! Всем спасибо. Особая благодарность 2 Y_Mur!
    Люди, цените и уважайте таких!
     
  9. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    MY_NUMBER equ 1.1718.
    А FPU придется использовать всяко.
    В гугле не пробовал искать про второй алгоритм, если не нашёл, могу у себя на харде пошарить, я похожее когда-то писал, правда на Си.
     
  10. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Sver4koff
    Не перехваливай, а то зазнаюсь :)))
    На ещё поделку с поддержкой ключей командной строки и выводом небольшой части cpuid инфы (ключи см. в Run.bat)
    %s - адрес строки заканчивающейся нулём
    %u - число без знака
    %d - знаковое число
    %h - hex число
    есть ещё см. WinHelp или msdn
    Последовательность и количество дополнительных параметров wsprintf должно соответствовать последовательности ключей
     
  11. RedLine

    RedLine New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2006
    Сообщения:
    2
    Нужна помощ..
    Надо програму под ДОС тест Флеш памяти
    Тест должен быть таким: занесения числа в флеш память и считывание его..
    Кто может чтото подсказать как это реализовать?
     
  12. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    в какую флеш-память?
     
  13. Sver4koff

    Sver4koff New Member

    Публикаций:
    0
    Регистрация:
    26 фев 2007
    Сообщения:
    13
    вопрос по ходу появился. как мне под дос прогу сделать, чтоб читала размер файла и результат на экран

    с определение размера вроде получилось, а перевести числов строку не пойму. хелп плиз

    просьба, "юзай поиск" не писать. здорово, если на примере покажите
     
  14. Smith

    Smith New Member

    Публикаций:
    0
    Регистрация:
    20 мар 2005
    Сообщения:
    18
    Адрес:
    Russia
    Люди плиз хелп ми... задачу нужно сделать на Паскале используя ООП а я совсем не разбираюсь в этом, собсно вот условие, если кому не трудно...

    Заданы 2 уравнения. Требуется найти общую переменную с мини-
    мальным номером, и, если она есть, исключить ее из второго
    уравнения. При этом второе уравнение должно измениться, чтобы
    система из 2 уравнений осталась эквивалентной заданной.
    Если при изменении второго уравнения один из его коэффи-
    циентов оказывается равным 0, то этот элемент надо из списка
    исключить. Если после таких исключений второе уравнение будет
    иметь вид 0=a (или 0=0), то об этом должна выдаваться поясня-
    ющая информация.
     
  15. satori

    satori New Member

    Публикаций:
    0
    Регистрация:
    15 мар 2007
    Сообщения:
    3
    ААаа! Я не туда написала. Я случайно создала тему по этому вопросу и только потом поняла,что ошиблась темой."."



    Да... Через неделю экзамен по ассемблеру.Учитель,зараза такая, почти весь год ничему не учил...

    Суть проги: показывать на экране треугольники,квадраты и прямоугольники из *.
    Юзер выбирает из меню что он хочет - треугольники,квадраты или прямоугольники,в соответствии с тем,что он выбрал,на экране появляется сабж (что-то типа "введите число для строк и колонок") , и на экране появляется такое:

    *****
    *****
    *****

    (или
    ___*
    __***
    _*****
    если треугольник).

    у меня есть просто прога,которая показывает треугольник.
    мне ее надо изменить на функцию.Я пыталась,работает,но не так,как надо (
    И еще нужна функция,которая проверяет правильность введенного числа
    ( как в главном меню - где юзер выбирает,что он хочет - треугольники,квадрат...,так и когда юзер выбирает,сколько строк и колонок будет в прямоугольнике.)

    Я просто не врубаюсь,как их написать.

    Пожалуйста, умоляю, помогите написать эти .... функции.

    Код (Text):
    1. dseg            segment
    2. NewLine         db 10, 13, '$'
    3. msgKelet        db "Enter numbers of rows : $"
    4. msgEnd          db "Press any key to finish...$"
    5. Spaces          db ?
    6. Stars           db 1
    7. dseg            ends
    8.  
    9. cseg            segment
    10. assume          cs:cseg, ds:dseg
    11. Start:          mov ax,dseg
    12.                 mov ds,ax
    13.        
    14.                 mov cx, 54
    15. ClrScrn:        mov dx, offset NewLine
    16.                 mov ah, 9h
    17.                 int 21h
    18.                 loop ClrScrn
    19. ;Это можно заменить на Call ClrScrn,если добавить  include conio.h               
    20.                 mov dx, offset msgKelet
    21.                 mov ah, 9h
    22.                 int 21h
    23.                 mov ah, 1
    24.                 int 21h
    25.                 sub al, '0'
    26.                
    27.                 mov bl, al     
    28.                 mov Spaces, al 
    29.                
    30.                
    31.                 mov dx, offset NewLine
    32.                 mov ah, 9h
    33.                 int 21h
    34.                
    35.                
    36. ShowNextLine:   mov bh, Spaces 
    37. ShowNextSpace:  mov dl, ' '
    38.                 mov ah, 2
    39.                 int 21h
    40.                 dec bh         
    41.                 jnz ShowNextSpace
    42.                
    43.                
    44.                 mov bh, Stars  
    45. ShowNextStar:   mov dl, '*'
    46.                 mov ah, 2
    47.                 int 21h
    48.                 dec bh         
    49.                 jnz ShowNextStar
    50.                
    51.                 mov dx, offset NewLine
    52.                 mov ah, 9h
    53.                 int 21h
    54.                 dec Spaces
    55.                 add Stars, 2
    56.                 dec bl         
    57.                 jnz ShowNextLine
    58.                
    59.                 mov dx, offset NewLine
    60.                 mov ah, 9h
    61.                 int 21h
    62.                
    63.                 mov dx, offset msgEnd
    64.                 mov ah, 9h
    65.                 int 21h
    66.                
    67.                 mov ah, 1
    68.                 int 21h
    69.                
    70.                 int 3h
    71. cseg            ends
    72. end             Start
    Deadline - в понедельник,секир башка - во вторник.


    То,над чем я кряхтела,выглядит так,а при запуске вот это --> '_' скачет по экрану :
    Код (Text):
    1. dseg segment
    2. StT         db "Press...",0dh,0ah, '$'
    3. Uni         dw ?
    4. Anykey      db "Press anykey....",0dh,0ah, '$'
    5. msgKelet        db "Enter numbers of rows : $"
    6. Num         db ?
    7. spaces      db ?
    8. stars       db 1
    9. dseg ends
    10. sseg segment stack
    11.         dw 100h dup(?)
    12. sseg ends
    13.  
    14. cseg    segment
    15. assume  cs:cseg,ds:dseg
    16. include conio.h
    17. include stdio.h
    18.  
    19. StarSS    proc
    20.                 push bp
    21.                 mov bp,sp
    22.                 push cx
    23.                 push dx
    24.                 push ax
    25.                 push offset msgKelet
    26.                 Call Puts
    27.                 Call GetchE
    28.                 sub al,30
    29.                 mov Num,al
    30.                 dec al
    31.                 mov spaces, al
    32.            
    33.                 mov cx,0
    34.                 mov cl,al
    35.  
    36. shura:          mov al,spaces
    37.                 mov dl,' '
    38.                 cmp spaces,0
    39.                 jz star
    40.  
    41. space:                       mov ah,2h
    42.                 int 21h
    43.                 dec al
    44.                 jnz space
    45.                 mov bl,stars
    46.                 mov dl,'*'
    47.        
    48. star:                                              mov ah,2h
    49.                 int 21h
    50.                 dec bl
    51.                 jnz star   
    52.    
    53.                 dec spaces
    54.                 inc stars
    55.                            
    56.                 mov dl,offset NewLine
    57.                 mov ah,9h
    58.                 int 21h
    59.                 loop shura
    60.                        
    61. EndPS:          pop ax
    62.                 pop dx
    63.                 pop cx
    64.                 pop bp
    65.                 ret 2
    66. StarSS   endp
    67.  
    68. start:   mov ax,dseg
    69.          mov ds,ax
    70.          Call Clrscrn
    71.          
    72.          jmp StarSS
    73.        
    74.  
    75.  
    76. endprog:  Call Newline
    77.           Call Newline
    78.           push offset Anykey
    79.                
    80. int  3h
    81. cseg  ends
    82. end  start
     
  16. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    зачем jmp StarSS, если это процедура? Нужно call.
     
  17. satori

    satori New Member

    Публикаций:
    0
    Регистрация:
    15 мар 2007
    Сообщения:
    3
    Точно. Невнимательно писала.)

    и ret вместо 2 надо 6,так?

    А кроме этого,все правильно?


    И еще.функция,которая выводит на экран прямоугольнки.
    До функции я делаю два раза Getche.первый раз для числа строк,второй - для колонок.
    [Call Getche
    mov ah,al
    Call Getche
    push ax]
    В ah - кол-во строк,в al - колонок.
    а потом в самой функции я опять делаю push ax и использую для loop значения в al и ah?

    или же лучше обозначить какую-нибудь переменную размером dw [например,num dw ? ], в первые два байта запихнуть кол-во строк,во вторые - колонок push num,call starsquare
    но тогда
    1.как запихнуть в первые и во вторые два байта значения?
    что-то типа
    Код (Text):
    1. mov bx,0
    2. mov num[bx],al ; кол-во строк
    3. ...
    4. mov num[bx+2],al ;кол-во колонок
    или так неправильно?

    2.как именно в самой функции относиться к значениям в num, которые обозначают размеры желаемого прямоугольника?
     
  18. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    хз. я не отлаживал код, по идее если параметры через стек не передаешь, то и просто ret.
    А почему бы не завести 2 переменных размером db?
    Если всё таки хочешь одну, то
    Код (Text):
    1. mov num,  al
    2. lea bx, num
    3. ...
    4. mov [bx + 1], al
     
  19. satori

    satori New Member

    Публикаций:
    0
    Регистрация:
    15 мар 2007
    Сообщения:
    3
    Можно и две.:)
    но тогда надо будет два раза делать push перед вызовом функции.


    у меня есть функция на С
    вводишь цифру,получаешь такого типа треугольник

    Enter a number: 5
    ____1
    ___121
    __12321
    _1234321
    123454321
    Вместо _ - пробел
    Код (Text):
    1. void main()
    2. {
    3.    int Num,k,m,Sifra=1;
    4.    printf("enter a number: ");
    5.    scanf("%d", & Num);
    6.    for(k=Num;k!=0;k--)
    7.    {
    8.       for(m=1;m<k;m++)
    9.          prinf("  "); // 2 spaces
    10.       for(m=1;m<=Sifra;m++)
    11.          prinf("%d",m);
    12.       for(m=Sifra-1;m>0;m--)
    13.          prinf("%d",m);
    14.       Sifra++;
    15.       prinf("\n");
    16.    }
    17. }
    как ее перевести на ассемблер?
     
  20. s1lver

    s1lver New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2007
    Сообщения:
    14
    Нужно сделать одно из этих заданий ! На любом языке. Не подскажете примерно как это сделать ?

    Защита от несанкционированного доступа к файлам, каталогам, разделам жесткого диска.
    Варианты заданий:

    помечать файлы в каталоге и осуществлять доступ по паролю. Файл не шифруется, - только блокируется доступ. При каждом открытии спрашивать пароль. Две программы: менеджер файлов и резидент.

    помечать каталоги и при попытке прочитать содержимое или перейти в него спрашивать пароль. Пароли записывать в свободное место в элементе каталога.

    написать резидентную программу, запрещающую запускать файлы: a) работающие в графическом режиме кроме содержащих маску б) по маске содержимого файла Список масок хранить в теле программы или во внешнем файле, но так, чтобы можно было внести изменения, добавления этого списка и программа учитывала произведенные изменения.

    программа эквивалент WipeFile. Очистка содержимого файла, усечение длины и удаление его из каталога без возможности восстановить содержимое и название. Обрабатывать удаление по шаблону и подкаталоги.

    написать резидентную программу, отслеживающую удаление файла стандартными средствами (Int 21h, ah=41h,13h). Которая сначала очищает содержимое файла, затем очищает каталоговый вход.

    написать Boot-менеджер, который при загрузке будет спрашивать пароль. Пароль не сохранять и использовать как ключ для дешифровки. На корректность ввода пароля проверять только контрольную сумму. Таблицу разделов и корневую запись хранить в зашифрованном виде.

    Я так понял нужно написать фильтр драйвер файловой системы . Может кто нибудь посоветует литературу какую нибудь или вообще , направление куда рыть надо ... А то весь нет перелазил уже ... (