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

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

  1. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    valeria
    когда человек врубается в суть, но не понимает какие-то детали ;)
     
  2. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    проходных предметов не бывает, если есть - значит надо. Да и информатику тебе преподают больше не для того, чтобы ты знала ассемблер, а для развития у тебя "программерского", алгоритмического мышления, которое в жизни очень пригодится.
     
  3. valeria

    valeria New Member

    Публикаций:
    0
    Регистрация:
    19 ноя 2008
    Сообщения:
    7
    на факультете легкой промышленности :derisive:
     
  4. B1ack

    B1ack New Member

    Публикаций:
    0
    Регистрация:
    24 ноя 2008
    Сообщения:
    3
    Вопрос-что делает эта функция?
    Код (Text):
    1. function lr(a, b: LongWord): LongWord;
    2. asm
    3.   mov  ecx, edx
    4.   rol  eax, cl
    5. end;
     
  5. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    B1ack
    Через eax передаётся a.
    Через edx передаётся b.
    Соответственно функция выполняет циклический сдвиг переменной a на количество разрядов b.
     
  6. valeria

    valeria New Member

    Публикаций:
    0
    Регистрация:
    19 ноя 2008
    Сообщения:
    7
    ребята привет!
    Посидела, почитала книжек, вот что удалось набросать
    Код (Text):
    1.  .MODEL   SMALL
    2.     .STACK   10h
    3.     .DATA
    4.    bcdv1 DB ....
    5.    bcdv2 DB  ....
    6.    bcdv3 DB ?
    7.    bcdv4 DB ?
    8.    sum  DB 2 DUP(?)
    9.    dif  DB 2 DUP(?)
    10. assume cs:code_sg,ds:code_sg,ss:code_sg
    11.  
    12.  begin: mov ax,@DATA
    13.        mov ds,ax
    14.        mov al,bcdv1
    15.        add al,bcdv2
    16.        daa
    17.        mov sum,al
    18.        mov al,bcdv1+1
    19.        adc al,bcdv2+1
    20.        daa
    21.        mov sum+1,al
    22.        mov al,bcdv1
    23.        sub al,bcdv2
    24.        das
    25.        mov dif,al
    26.        mov al,bcdv1+1
    27.        sbb al,bcdv2+1
    28.        das
    29.        mov sum+1,al
    30.   END  begin
    на этом все потуги сошли на нет. Что поставить вместо многоточия и как вывести вектора 3 и 4 для меня осталось загадкой. Что можете подсказать?
     
  7. Odin

    Odin New Member

    Публикаций:
    0
    Регистрация:
    11 май 2008
    Сообщения:
    2
    добрый день, скажите пожалуйста сколько будет стоить решение данных задач и кто может выполнить, перевод денег по wm:
    1.Расшифровать следующую команду, определить результат ее выполнения – содержимое аккумулятора или указанного в команде регистра, а также триггера переноса (признака переноса (С)) при заданных исходных данных. Определить время выполнения команды (частоту генератора задать самостоятельно), объем занимаемой памяти.
    ADD A, #0BH при (A)=AAH;
    2. Составить программу для вычисления следующего выражения:
    ______
    С=(Q&E\/T)&G;
    где Q – AC (вспомогательный перенос), E - Р (паритет), Т и G - два любых прямоадресуемых бита.
    Примечание: значение переменных Q, E, T, G выбрать самостоятельно.
    3. Проинвертировать биты 0-3 аккумуляторы.
    4.Расшифровать следующую команду, определить результат ее выполнения – содержимое аккумулятора или указанного в команде регистра, а также триггера переноса (признака переноса (С)) при заданных исходных данных. Определить время выполнения команды (частоту генератора задать самостоятельно), объем занимаемой памяти.
    INC @R1 при [(R1)]=2AH;
    5.Написать программу, осуществляющую сброс всех флагов пользователя (область РПД с адресами 20Н-2FH).
    6.Загрузить управляющее слово в регистр управления таймером.
     
  8. KeepeR

    KeepeR New Member

    Публикаций:
    0
    Регистрация:
    25 ноя 2008
    Сообщения:
    1
    Доброго времени суток! Может кто помоч реализовать такое задание на masm32?

    Сосчитать количество подкаталогов в текущем каталоге. Если таких каталогов больше заданного числа, вывести атрибуты самого длинного файла, иначе скопировать содержимое текущего каталога в новый и сделать его текущим.
     
  9. Liam

    Liam New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2008
    Сообщения:
    7
    Я уже писал здесь про свою лабу. Вот ещё раз задание:
    Дано 16-битное число. Найти серию максимальной длины, состоящую из одних нулей.

    Вот что у меня получилось:

    Код (Text):
    1.     .model  small
    2.     .stack  100h
    3.  
    4.     .data
    5. inp dw  1010011000100001b
    6. count   db  0
    7. max db  0
    8.  
    9.     .code
    10. begin:
    11.     mov ax,@data
    12.     mov ds,ax
    13.     mov cx,0
    14.     mov ax,inp
    15. cicle:
    16.     shl ax,cx
    17.     mov bx,128
    18.     and bx,ax
    19.     cmp bx,128
    20.     je  one
    21. next:
    22.     inc count
    23.     inc cx
    24.     cmp cx,16
    25.     jne     cicle
    26. one:
    27.     cmp count,max
    28.     ja  max
    29. ret:   
    30.     mov count,0
    31.     jmp next
    32. max:
    33.     mov max,count
    34.     jmp ret
    35.  
    36.     cmp count,max
    37.     jbe exit
    38.     mov max,count
    39. exit:  
    40.     mov ah,4ch
    41.     int 21h
    42.     end begin
    При компиляции куча ошибок:

    Код (Text):
    1. **Error** lab2.asm(16) Rotate count must be constant or CL
    2. **Error** lab2.asm(27) Illegal memory reference
    3. **Error** lab2.asm(28) Argument to operation or instruction has illegal size
    4. *Warning* lab2.asm(29) Reserved word used as symbol: RET
    5. **Error** lab2.asm(32) Symbol already different kind: MAX
    6. **Error** lab2.asm(33) Need register in expression
    7. **Error** lab2.asm(36) Illegal memory reference
    8. **Error** lab2.asm(38) Need register in expression
    9. Error messages:    7
    10. Warning messages:  1
    11. Passes:            1
    12. Remaining memory:  415k
    Помогите исправить, пожалуйста :)
     
  10. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    никогда не понимал людей просящих исправить ошибки синтаксиса %)
     
  11. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.784
    Liam в скобках указан номер строки
    (7)max db 0<-- здесь ты объявляешь переменную с именем max а на 32 строке метка с таким же именем
    (16)shl ax,cx;Rotate count must be constant or CL <-- сдвинуть 16-разрядное число в ax больше чем на 16 разрядов нельзя, поэтому измени команду на shl ax,cl о чем тебе компилятор и написал
    (27)cmp count,max ;Illegal memory reference <-- в ассемблере могут быть следующие типы команд: 1)память+непосредственное значение, 2)регистр+непосредственное значение, 3)регистр+регистр, 4)регистр+память -- команд типа память+память здесь нет, та же ошибка и на 33, 36 и 38 строке
    (28)ja max;Argument to operation or instruction has illegal size<-- ошибка связана с ошибкой на 7 строке, ассемблер считает, что переход должен произойти не на метку max, а по адресу, который находится в переменной max, но в данном случае, ее размер -- байт, а для того чтобы хранить там адрес перехода требуется ячейка размером в слово
    (29)ret: ;Reserved word used as symbol: RET <-- использование в качестве названия метки наименования команды ret
    (32)max: ;Symbol already different kind: MAX <-- с этим названием уже есть ячейка памяти на 7 строке
    (33) mov max,count ;Need register in expression <-- смотри ошибку на 27 строке
    (34) jmp ret <-- использование в качестве названия метки наименования команды ret
    (36) cmp count,max ;Illegal memory reference <-- смотри ошибку на 27 строке
    (38) mov max,count ;Need register in expression<-- смотри ошибку на 27 строке
     
  12. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    GoldFinch, Mikl___
    Там проблема не только в синтаксисе. Там ерунда написана.
    Liam
    "Слегка" подправил Ваш вариант:
    Код (Text):
    1. .model    small
    2. .stack  100h
    3. .data
    4.     inp dw  1010011000100001b
    5.     max dw  0
    6. .code
    7.     begin:
    8.         mov ax,@data
    9.         mov ds,ax
    10.         mov ax,inp                  ;ax используем для проверки зачений битов inp
    11.         mov si,17                   ;si - счётчик битов. Выставляем на единицу больше числа проверяемых битов
    12.         cycle1:
    13.             xor cx,cx               ;cx - счётчик длины текущей цепочки из нуль-битов
    14.             cycle2:
    15.                 inc cx              ;рост счётчика длины текущей цепочки нуль-битов (счётчик всегда на единцу больше этой длины)
    16.                 dec si              ;уменьшаем счётчик битов числа
    17.                 jz noMoreBits       ;если битов больше не осталось, выходим из цикла
    18.                 shl ax,1            ;выдвигаем в флаг cf самый старший бит ax.
    19.             jnc cycle2              ;если выдвинули в cf нуль, продолжаем считать нуль-биты цепочки
    20.             noMoreBits:             ;если цепочка из нуль-битов прервана...
    21.             sub max,cx              ;проверяем, не больше ли текущий максимум длины только что посчитанной цепочки нуль-битов
    22.                                     ;если cx больше, то будет выставлен флаг cf
    23.             sbb dx,dx               ;если выставлен cf, то в dx будет 0FFFFh, иначе в dx 0
    24.             not dx                  ;для удобства инвертируем dx (в dx будет 0, если мы нашли новый максимум)
    25.             and max,dx              ;если мы нашли новый максимум, то max будет обнулён, иначе не изменится
    26.             add max,cx              ;если мы нашли новый максимум, то cx попадёт в max, иначе восстановим старое значение max (мы его уменьшили инструкцией sub max,cx)
    27.         test si,si                  ;проверяем остались ли ещё биты
    28.         jnz cycle1
    29.         dec max                     ;т.к. счётчик нуль-битов всегда на единицу больше их числа, восстанавливаем реальное количество нуль-битов
    30.         mov ah,4ch                  ;\
    31.         int 21h                     ;_> выходим
    32.     end begin
     
  13. KozzyKoder

    KozzyKoder New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2008
    Сообщения:
    12
    Прошу прощения, но кто-нибудь может подкинуть исходник пустого процесса(проги которая запускается и сразу завершается). Под Компилятор TASM32. С облегченным синтаксисом описания сегментов. Чтобы работала в терминале MS-DOS и чтобы можно было использовать 32 разрядные регистры. Почему то все попытки найти такую программу не удаются. В лучшем случае exeшник вылетает с ошибкой. Вот примерно какой код я компилю:

    .386
    .model flat
    .stack 100h
    .data
    .code
    start:
    mov ah, 4ch
    int 21h
    end start
     
  14. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Как то так:
    Код (Text):
    1. .model  tiny
    2. .386
    3. .code
    4. locals  __
    5.  
    6. start:
    7. xor eax, eax
    8. add ah, 4ch
    9. int 21h
    10.  
    11. end start
     
  15. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    ты хочешь dos-приложение сделать? или windows? Если dos, то 32-разрядные регистры можно заюзать с промощью dos-расширителей (гугли dos32, "dos расширитель", dpmi итп). Если windows (что вряд ли, судя по твоему коду) - то в сети можно найти миллион программ на тасм для винды.
     
  16. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.784
    KozzyKoder
    Если DOS- приложение COM -- model tiny, EXE -- model small, medium, large, huge
    Если WINDOWS EXE, DLL, SYS, VxD -- model flat
    В случае COM
    Код (Text):
    1. .model  tiny
    2. .386
    3. org 100h
    4. .code
    5. start: retn
    6. end start
    В случае WINDOWS EXE
    Код (Text):
    1. .model flat
    2. .386
    3. .code
    4. start: retn
    5. end start
     
  17. Vika_M

    Vika_M New Member

    Публикаций:
    0
    Регистрация:
    29 ноя 2008
    Сообщения:
    2
    Всем привет. Помогите реализовать функцию strcspn
     
  18. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    вот. немного подправеть и будет все супер
     
  19. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    Vika_M
    http://www.google.com/codesearch?hl=ru&newwindow=0&q=strcspn
     
  20. bigredcat

    bigredcat New Member

    Публикаций:
    0
    Регистрация:
    3 сен 2007
    Сообщения:
    54
    8(
    MS так сделала:
    Код (Text):
    1.         page    ,132
    2.         title   strspn - search for init substring of chars from control str
    3. ;***
    4. ;strspn.asm - find length of initial substring of chars from a control string
    5. ;
    6. ;       Copyright (c) Microsoft Corporation. All rights reserved.
    7. ;
    8. ;Purpose:
    9. ;       defines strspn() - finds the length of the initial substring of
    10. ;       a string consisting entirely of characters from a control string.
    11. ;
    12. ;       defines strcspn()- finds the length of the initial substring of
    13. ;       a string consisting entirely of characters not in a control string.
    14. ;
    15. ;       defines strpbrk()- finds the index of the first character in a string
    16. ;       that is not in a control string
    17. ;
    18. ;*******************************************************************************
    19.  
    20.         .xlist
    21.         include cruntime.inc
    22.         .list
    23.  
    24. page
    25. ;***
    26. ;int strspn(string, control) - find init substring of control chars
    27. ;
    28. ;Purpose:
    29. ;       Finds the index of the first character in string that does belong
    30. ;       to the set of characters specified by control.  This is
    31. ;       equivalent to the length of the initial substring of string that
    32. ;       consists entirely of characters from control.  The '\0' character
    33. ;       that terminates control is not considered in the matching process.
    34. ;
    35. ;       Algorithm:
    36. ;       int
    37. ;       strspn (string, control)
    38. ;               unsigned char *string, *control;
    39. ;       {
    40. ;               unsigned char map[32];
    41. ;               int count;
    42. ;
    43. ;               for (count = 0; count < 32; count++)
    44. ;                       map[count] = 0;
    45. ;               while (*control)
    46. ;               {
    47. ;                       map[*control >> 3] |= (1 << (*control & 7));
    48. ;                       control++;
    49. ;               }
    50. ;               if (*string)
    51. ;               {
    52. ;                       while (map[*string >> 3] & (1 << (*string & 7)))
    53. ;                       {
    54. ;                               count++;
    55. ;                               string++;
    56. ;                       }
    57. ;                       return(count);
    58. ;               }
    59. ;               return(0);
    60. ;       }
    61. ;
    62. ;Entry:
    63. ;       char *string - string to search
    64. ;       char *control - string containing characters not to search for
    65. ;
    66. ;Exit:
    67. ;       returns index of first char in string not in control
    68. ;
    69. ;Uses:
    70. ;
    71. ;Exceptions:
    72. ;
    73. ;*******************************************************************************
    74.  
    75. ;***
    76. ;int strcspn(string, control) - search for init substring w/o control chars
    77. ;
    78. ;Purpose:
    79. ;       returns the index of the first character in string that belongs
    80. ;       to the set of characters specified by control.  This is equivalent
    81. ;       to the length of the length of the initial substring of string
    82. ;       composed entirely of characters not in control.  Null chars not
    83. ;       considered.
    84. ;
    85. ;       Algorithm:
    86. ;       int
    87. ;       strcspn (string, control)
    88. ;               unsigned char *string, *control;
    89. ;       {
    90. ;               unsigned char map[32];
    91. ;               int count;
    92. ;
    93. ;               for (count = 0; count < 32; count++)
    94. ;                       map[count] = 0;
    95. ;               while (*control)
    96. ;               {
    97. ;                       map[*control >> 3] |= (1 << (*control & 7));
    98. ;                       control++;
    99. ;               }
    100. ;               map[0] |= 1;
    101. ;               while (!(map[*string >> 3] & (1 << (*string & 7))))
    102. ;               {
    103. ;                       count++;
    104. ;                       string++;
    105. ;               }
    106. ;               return(count);
    107. ;       }
    108. ;
    109. ;Entry:
    110. ;       char *string - string to search
    111. ;       char *control - set of characters not allowed in init substring
    112. ;
    113. ;Exit:
    114. ;       returns the index of the first char in string
    115. ;       that is in the set of characters specified by control.
    116. ;
    117. ;Uses:
    118. ;
    119. ;Exceptions:
    120. ;
    121. ;*******************************************************************************
    122.  
    123. ;***
    124. ;char *strpbrk(string, control) - scans string for a character from control
    125. ;
    126. ;Purpose:
    127. ;       Finds the first occurence in string of any character from
    128. ;       the control string.
    129. ;
    130. ;       Algorithm:
    131. ;       char *
    132. ;       strpbrk (string, control)
    133. ;               unsigned char *string, *control;
    134. ;       {
    135. ;               unsigned char map[32];
    136. ;               int count;
    137. ;
    138. ;               for (count = 0; count < 32; count++)
    139. ;                       map[count] = 0;
    140. ;               while (*control)
    141. ;               {
    142. ;                       map[*control >> 3] |= (1 << (*control & 7));
    143. ;                       control++;
    144. ;               }
    145. ;               while (*string)
    146. ;               {
    147. ;                       if (map[*string >> 3] & (1 << (*string & 7)))
    148. ;                               return(string);
    149. ;                       string++;
    150. ;               }
    151. ;               return(NULL);
    152. ;       }
    153. ;
    154. ;Entry:
    155. ;       char *string - string to search in
    156. ;       char *control - string containing characters to search for
    157. ;
    158. ;Exit:
    159. ;       returns a pointer to the first character from control found
    160. ;       in string.
    161. ;       returns NULL if string and control have no characters in common.
    162. ;
    163. ;Uses:
    164. ;
    165. ;Exceptions:
    166. ;
    167. ;*******************************************************************************
    168.  
    169.  
    170. ifdef SSTRCSPN
    171.  
    172.     _STRSPN_ equ <strcspn>
    173.  
    174. elseifdef SSTRPBRK
    175.  
    176.     _STRSPN_ equ <strpbrk>
    177.  
    178. else  ; SSTRCSPN
    179.  
    180. ; Default is to build strspn()
    181.  
    182.     SSTRSPN equ 1
    183.     _STRSPN_ equ <strspn>
    184.  
    185. endif  ; SSTRCSPN
    186.  
    187. % public  _STRSPN_
    188.  
    189.     CODESEG
    190.  
    191. _STRSPN_ proc \
    192.         uses esi, \
    193.         string:ptr byte, \
    194.         control:ptr byte
    195.  
    196. ; create and zero out char bit map
    197.  
    198.         xor     eax,eax
    199.         push    eax             ; 32
    200.         push    eax
    201.         push    eax
    202.         push    eax             ; 128
    203.         push    eax
    204.         push    eax
    205.         push    eax
    206.         push    eax             ; 256
    207.  
    208. map     equ     [esp]
    209.  
    210. ; Set control char bits in map
    211.  
    212.         mov     edx,control     ; si = control string
    213.  
    214.         align   @WordSize
    215. lab listnext                    ; init char bit map
    216.         mov     al,[edx]
    217.         or      al,al
    218.         jz      short listdone
    219.         add     edx,1
    220.         bts     map,eax
    221.         jmp     short listnext
    222.  
    223. lab listdone
    224.  
    225. ; Loop through comparing source string with control bits
    226.  
    227.         mov     esi,string      ; si = string
    228.  
    229. _ifnd   SSTRPBRK <or     ecx,-1> ; set ecx to -1
    230.  
    231.         align   @WordSize
    232. lab dstnext
    233.  
    234. _ifnd   SSTRPBRK <add    ecx,1>
    235.  
    236.         mov     al,[esi]
    237.         or      al,al
    238.         jz      short dstdone
    239.         add     esi,1
    240.         bt      map, eax
    241.  
    242. ifdef SSTRSPN
    243.         jc      short dstnext   ; strspn: found char, continue
    244. elseifdef SSTRCSPN
    245.         jnc     short dstnext   ; strcspn: did not find char, continue
    246. elseifdef SSTRPBRK
    247.         jnc     short dstnext   ; strpbrk: did not find char, continue
    248.         lea     eax,[esi - 1]   ; found char, return address of it
    249. endif  ; SSTRSPN
    250.  
    251. ; Return code
    252.  
    253. lab dstdone
    254.  
    255. _ifnd   SSTRPBRK <mov   eax,ecx> ; strspn/strcspn: return index
    256.  
    257.         add     esp,32
    258.  
    259.         ret                     ; _cdecl return
    260.  
    261. _STRSPN_ endp
    262.          end