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

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

  1. Rin

    Rin New Member

    Публикаций:
    0
    Регистрация:
    22 ноя 2010
    Сообщения:
    6
    Простите, l_inc. Везде моя невнимательность виной - что в сорце, что в вашем никнейме. Компилятор, кажется, от RadAsm. Но у меня от него лишь ML.exe и Link16.exe, ну и самописный батник. А какой компилятор вы предложили бы?
     
  2. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Rin
    RadAsm — это не компилятор, а среда разработки. А компилятор (в который как раз и входят ml.exe и link16.exe) — masm.
    Это как спросить пользователя Linux, какую ОС он бы предложил использовать. Я пользуюсь fasm, привык к нему и считаю его по ряду причин самым суперпуперскиажпосамоенемогукрутым. Соответственно masm считаю неудобным. Только и всего.
     
  3. Ahito

    Ahito New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2011
    Сообщения:
    7
    Как это сделать?
    Постоить ХЕШ - таблицу для заданной последовательности ключей.
    Размеp ХЕШ- таблицы N' = N+6, где N - длина заданной последовательности. Способ устpанения колизий выбpать по таблице: 1 - откpытое пеpемешивание, 2 - пеpемешивание с цепочками пеpеполнения.
    ключи-6,10,13,17,21,1,3,5,11,9,7
    способ-2
     
  4. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    1) Что-то сделать самому и потом уже спрашивать
    2) Либо пойти в раздел COMMERCE

    В вашей постановке задаче неясно: какая длина ключа и хеша? (видимо 5 и 4 бита?)
    А если выбрать hash=key mod 17 получим хеш-таблицу длиной 11+6=17 и без коллизий
     
  5. Ahito

    Ahito New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2011
    Сообщения:
    7
    valterg
    как получить таблицу без колизий? помогите пожалуйста

    Вы меня извените, я понимаю что такое хеш-таблица, и как её реализовать в джаве например.
    Но вот как её просто "построить" не понимаю. Ассемблер только начал изучать.
     
  6. Kliao

    Kliao New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2011
    Сообщения:
    1
    Доброго времени суток! Нужна помощь с программой для курсового.
    Суть такова: Разработать программу определения характеристик жесткого диска (Цилиндры, головки, количество байт на сектор, свободное пространство) и разработка граф. интерфейса для этой программы.
    Проблема: Програму вывода характеристик кое-как написал (что-то подсмотрел, что-то скопипастил), вроде работает. Но вот с граф. интерфейсом совсем никак. Нужно сделать елементарный выбор либо "Нажмите 1 - выведутся цилиндры для диска, Нажмите 2 - выведутся головки" либо "Нажмите 1 для вывода характеристик диска С, нажмите 2 для вывода характеристик диска D" и т.д.

    Код:
    Код (Text):
    1. .model small
    2. .data
    3. old24   dd 0
    4. dsk db 1
    5. msg1    db 13,10,'Drive $'
    6. msg2    db ': $'
    7. msg3    db ' clusters, $'
    8. msg4    db ' SPC, $'
    9. msg5    db ' BPS. $'
    10. msg6    db ' Bytes free.$'
    11. msg7    db 13,10,'SPC - Sectors per cluster'
    12. db 13,10,'BPS - Bytes per Sector$'
    13. .stack 256
    14. .code
    15. .386
    16. start:
    17. mov ax,@data   
    18. mov ds,ax
    19. mov ax,3524h   
    20. int 21h    
    21. mov word ptr old24,bx  
    22. mov ax,es
    23. mov word ptr old24+2,ax
    24. push ds    
    25. push cs
    26. pop ds     
    27. lea dx,new24   
    28. mov ax,2524h   
    29. int 21h    
    30. pop ds     
    31. m1:
    32. mov ah,36h 
    33. mov dl,dsk 
    34. int 21h    
    35. cmp ax,0ffffh  
    36. jz m2      
    37. push ax    
    38. push bx
    39. push cx
    40. mov ah,9       
    41. lea dx,msg1    
    42. int 21h        
    43. mov ah,2       
    44. mov dl,dsk     
    45. add dl,40h     
    46. int 21h        
    47. mov ah,9       
    48. lea dx,msg2    
    49. int 21h        
    50. mov ah,1ch     
    51. mov dl,dsk     
    52. push ds        
    53. int 21h        
    54. pop ds         
    55. mov ah,0       
    56. push cx        
    57. push ax          
    58. mov ax,dx      
    59. call printdec      
    60. mov ah,9       
    61. lea dx,msg3    
    62. int 21h        
    63. pop ax         
    64. call printdec      
    65. mov ah,9       
    66. lea dx,msg4    
    67. int 21h        
    68. pop ax         
    69. call printdec      
    70. mov ah,9       
    71. lea dx,msg5    
    72. int 21h
    73. xor eax,eax    
    74. xor ebx,ebx
    75. xor ecx,ecx
    76. pop cx     
    77. pop bx     
    78. pop ax     
    79. mul ebx    
    80. mul ecx    
    81. call printdec  
    82. mov ah,9       
    83. lea dx,msg6    
    84. int 21h    
    85. m2: inc dsk
    86. cmp dsk,26 
    87. jbe m1     
    88. mov ax,word ptr old24+2
    89. mov es,ax
    90. mov bx,word ptr old24  
    91. mov ax,2524h   
    92. int 21h    
    93. mov ah,9       
    94. lea dx,msg7    
    95. int 21h        
    96. mov ah,1   
    97. int 21h
    98. mov ax,4c00h
    99. int 21h
    100. new24:  mov al,3   
    101. iret       
    102. printdec proc
    103. push ecx   
    104. push edx
    105. push ebx
    106. mov ebx,10 
    107. xor ecx,ecx
    108. @@m1a: xor edx,edx
    109. div ebx    
    110. push edx       
    111. inc ecx    
    112. test eax,eax   
    113. jnz @@m1a  
    114. mov ah,2        
    115. @@m2a: pop edx     
    116. add dl,'0' 
    117. int 21h    
    118. loop @@m2a 
    119. pop ebx    
    120. pop edx
    121. pop ecx
    122. ret    
    123. printdec endp
    124. end start
     
  7. Ahito

    Ahito New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2011
    Сообщения:
    7
    помогите!
     
  8. Ahito

    Ahito New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2011
    Сообщения:
    7
    Как описать изменение содержимого стека и регистра sp после выполнения каждой команды из нижеприведенной последовательности.

    А
    Код (Text):
    1. дрес              Оператор
    2.  
    3.                        title   callproc
    4. 0000          stacksg  segment para stack 'Stack'
    5. 0000                   dw      32 dup(?)
    6. 0040          stacksg  ends
    7.  
    8. 0000          codesg   segment para 'Code'
    9. 0000          begin    proc    far
    10.                        assume  cs:codesg,ss:stacksg
    11. 0000                   push    ds
    12. 0001                   sub     ax,ax
    13. 0003                   push    ax
    14. 0004                   call    a10
    15. 0007                   call    b10
    16. 000A                   ret
    17. 000B          begin    endp
    18.  
    19. 000B          a10      proc
    20. 000B                   call    c10
    21. 000E                   call    b10
    22.  
    23. ...                    ...
    24.  
    25. 0020                   ret
    26. 0021          a10      endp
    27. 0021          b10      proc
    28. 0021                   call    c10
    29.  
    30. ...                    ...
    31.  
    32. 0040                   ret
    33. 0041          b10      endp
    34.  
    35. 0041          c10      proc
    36.  
    37. ...                    ...
    38.  
    39. 0050                   ret
    40. 0051          c10      endp
    41.                        end     begin
     
  9. Sholar

    Sholar New Member

    Публикаций:
    0
    Регистрация:
    16 окт 2011
    Сообщения:
    189
    Никак не могу разобраться с переходом в нулевое кольцо. Как проц узнает по какому адресу нужно передать управление? К примеру, при вызове функции NtCreateFile в EAX заносится 25h и выполняется команда SYSENTER. Насколько я понял, адресс функции должен лежать в GDTR.Base+25h*8(размер одного дескриптора). Но там его нет.
     
  10. shore

    shore New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2011
    Сообщения:
    29
    Сначала, в третьем кольце, вызывается соответствующая функция библиотеки ntdll, где в регистр EAX помещается номер вызываемого системного сервиса, а в регистр EDX - указатель на передаваемые параметры. Затем вызывается прерывание 2Eh (в Windows XP и старше - команда sysenter), и происходит переход процесса в нулевое кольцо, где управление передается согласно записанному в IDT шлюзу прерывания. В этом месте происходит переключение окружения третьего кольца на нулевое. Выполняется смена пользовательского стека на стек ядра. Также осуществляется перезагрузка сегментного регистра FS, который в нулевом кольце указывает на совершенно иные структуры, чем в третьем кольце. Затем управление передается обработчику прерывания 2Eh - функции ядра KiSystemService. Она копирует в стек ядра передаваемые системному сервису параметры и производит вызов Native API функции ядра, согласно содержимому ServiceDescriptorTable (SDT). Эта таблица находится в памяти ядра и представляет собой структуру, содержащую четыре таблицы системных сервисов (SST). Первая из этих таблиц описывает сервисы, экспортируемые ядром (ntoskrnl.exe), вторая - графической подсистемой (win32k.sys), а остальные две зарезервированы на будущее и сейчас не используются.

    p/s если я не прав, исправте)
     
  11. Sholar

    Sholar New Member

    Публикаций:
    0
    Регистрация:
    16 окт 2011
    Сообщения:
    189
    Прирывание и SYSENTER разные вещи же. При выполнении SYSENTER адресс обработчика берется из GDT, адресс GDT в свою очередь берется из GDTR. Меня интересует по какому конкретно смещению относительно начала GDT будет лежать адресс функции с номером 25h(NtCreateFile)
     
  12. jsdive

    jsdive New Member

    Публикаций:
    0
    Регистрация:
    11 дек 2011
    Сообщения:
    1
    Помогите с лабораторной:
    в командной строке задается параметр, состоящий из букв и цифр. удалить все символы, не являющиеся буквами и вывести на экран
     
  13. Sholar

    Sholar New Member

    Публикаций:
    0
    Регистрация:
    16 окт 2011
    Сообщения:
    189
    Может быть быдлокод, но вроде работает (:
    Код (Text):
    1. #include <stdio.h>
    2. #include <string.h>
    3. #include <ctype.h>
    4.  
    5. int main(int argc, char**argv)
    6. {
    7.     if(argc != 2) return 1;
    8.  
    9.     int length = strlen(argv[1]);
    10.  
    11.     for(int i = 0; i<length; i++)
    12.     {
    13.         if(!isalpha(argv[1][i]))
    14.         {
    15.             for(int j = i; j<length-1; j++)
    16.                argv[1][j] = argv[1][j+1];
    17.             length--;
    18.             i--;
    19.         }
    20.     }
    21.  
    22.     argv[1][length] = 0x00;
    23.     printf("%s",argv[1]);
    24. }
    P.S.
    Вопрос в посте #2473 все еще актуален.
     
  14. ejbfcrfvyr

    ejbfcrfvyr New Member

    Публикаций:
    0
    Регистрация:
    10 дек 2011
    Сообщения:
    18
    Sholar
    Под дурачка косите ?
     
  15. Sholar

    Sholar New Member

    Публикаций:
    0
    Регистрация:
    16 окт 2011
    Сообщения:
    189
    Нет, разобраться стараюсь. Перегрелся видать просто. Был уверен, что именно так и написано в одном из туторов на этом сайте. И еще долго был бы уверен, если бы не этот коммент. Вобщем спасибо, разобрался. shore отдельное спасибо.
     
  16. Sholar

    Sholar New Member

    Публикаций:
    0
    Регистрация:
    16 окт 2011
    Сообщения:
    189
    Можно ли заставить windows выполнять один процесс и не отдавать никому другому процессорное время, пока этого не сделает сам процесс.
     
  17. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Sholar
    Да. Но только имея привилегии уровня ядра.
     
  18. Sholar

    Sholar New Member

    Публикаций:
    0
    Регистрация:
    16 окт 2011
    Сообщения:
    189
    Скажи, если не трудно, в какую сторону копать.
     
  19. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Sholar
    В сторону написания драйвера, естесственно. В ядре достаточно сделать один простой вызов (повышение IRQL до DISPATCH_LEVEL) и никакой другой процесс не получит управление, пока IRQL не будет понижен.
     
  20. Sholar

    Sholar New Member

    Публикаций:
    0
    Регистрация:
    16 окт 2011
    Сообщения:
    189
    Ну это я понял)
    thx