Помогите найти min и max

Тема в разделе "WASM.ASSEMBLER", создана пользователем cibermind, 13 ноя 2010.

  1. cibermind

    cibermind New Member

    Публикаций:
    0
    Регистрация:
    27 фев 2008
    Сообщения:
    4
    Здравствуйте.
    Я очень плохо знаю asm, но по учебе задали задачку решить, а я не знаю как.((
    О, гуру, сжальтесь на о мной, и помогите, вот условие:
    str db 5,8,9,9,1,7,0,3,4.строковая переменная расположенная во флэш памяти.определить наибольшую и наименьшую цифру этой последовательности.
     
  2. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    А чем же ты занимался весь семестр, если не знаком даже с такими основами?
     
  3. Tronix

    Tronix Member

    Публикаций:
    0
    Регистрация:
    10 сен 2010
    Сообщения:
    122
    Где-где строковая переменная расположена? Для какого хоть процессора нужно?
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    cibermind
    Давайте подумаем:
    Код (Text):
    1.    Ip = @Str
    2.    Count = Length
    3.    Min = BYTE(0xFF)
    4.    Max = BYTE(0)
    5.    Do
    6.    N = BYTE[Ip]
    7.    If N < Min: Min = N
    8.    If N > Max: Max = N
    9.    Ip = Ip + 1
    10.    Count = Count - 1
    11.    Loop Count
    Описать этот псевдокод кодом мы не можем, так как не знаем необходимую вам архитектуру.
     
  5. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    cibermind
    пиши
    str db 5,8,9,9,1,7,0,3,4
    min db 0
    max db 9

    разве не видно
     
  6. edemko

    edemko New Member

    Публикаций:
    0
    Регистрация:
    25 ноя 2009
    Сообщения:
    454
    Clerk
    Там поправку: Min = BYTE(0xFF) и Max = BYTE(0).
    В потоке может не быть больших или меньших.
    Например имеем -128(,-127) -> Min=-128, Max=0.
    Например имеем 127 -> Min=-1, Max=127.


    фасм-макро, сильно не проверял
    Код (Text):
    1. ;rus: sz str1,'строка1',,'строка2' ->
    2. ;          str1.size=len('строка1',,'строка2')
    3. ;          dd str1.size
    4. ;     name db 'строка1'
    5. ;          db 'строка2'
    6. ;          db 0
    7. macro sz name*,[strings]{
    8.   common
    9.     dd 0
    10.     label name
    11.   forward
    12.     if ~strings eq
    13.       db strings
    14.     end if
    15.   common
    16.     name#.size=$-name
    17.     store dword name#.size at name-4
    18.     db 0
    19. }
    20.  
    21.  
    22. ;rus: найти мин. и макс. знаковые байты строки(и вывести на экран), совместимой с производимыми макросом <sz>.
    23. macro min_max string*{
    24.   ;rus: отругать за пустую строку
    25.   if string#.size=0
    26.     display 13,10,`string,'.size=0!'
    27.     err
    28.   else
    29.   ;rus: локальные переменные
    30.     local char,min,max
    31.   ;rus: movsx qword char, byte char
    32.     macro _movsx\{
    33.       if char and $80<>0
    34.         char=$ffff'ffff'ffff'ff00 or char
    35.       end if
    36.     \}
    37.   ;rus: установить начальные min и max как предположительно максимально возможные
    38.   ;     расширить байт в учетв.слово: !фасм считает qword'ами
    39.     load char byte from string
    40.     _movsx
    41.     min=char
    42.     max=char
    43.   ;rus: пройтись по всех символах, кроме уже взятого первого, подбирая новые min и max
    44.     repeat string#.size-1
    45.       load char byte from string+%
    46.       _movsx
    47.       if char<min
    48.         min=char
    49.       end if
    50.       if char>max
    51.         max=char
    52.       end if
    53.     end repeat
    54.   ;rus: выводит знаковый байт, записанный как знаковый qword
    55.     macro sdec3 val\{
    56.       char=val
    57.       if char<0
    58.         display '-'
    59.         char=-char
    60.       end if
    61.       display char/100+'0',(char/010)mod 10+'0',char mod 10+'0'
    62.     \}
    63.   ;rus: вывод результатов
    64.     display 13,10,'min='
    65.     sdec3 min
    66.     display 13,10,'max='
    67.     sdec3 max
    68. ;тест макро: вывести диапазон -128..127
    69. ;    display 13,10
    70. ;    repeat 128
    71. ;      sdec3(%-1-128)
    72. ;      display ','
    73. ;    end repeat
    74. ;    repeat 127
    75. ;      sdec3 %
    76. ;      display ','
    77. ;    end repeat
    78.   ;rus: выгрузить макро
    79.     purge _movsx
    80.     purge sdec3
    81.   end if
    82. }
    83.  
    84.  
    85.  
    86.  
    87. sz str1,\
    88.    -128,-127,-126,-125,-124,-123,-122,-121,-120,-119,-118,-117,-116,-115,-114,-113,-112,-111,-110,-109,-108,-107,-106,-105,-104,-103,-102,-101,-100,-099,-098,-097,-096,-095,-094,-093,-092,-091,-090,-089,-088,-087,-086,-085,-084,-083,-082,-081,-080,-079,-078,-077,-076,-075,-074,-073,-072,-071,-070,-069,-068,-067,-066,-065,-064,-063,-062,-061,-060,-059,-058,-057,-056,-055,-054,-053,-052,-051,-050,-049,-048,-047,-046,-045,-044,-043,-042,-041,-040,-039,-038,-037,-036,-035,-034,-033,-032,-031,-030,-029,-028,-027,-026,-025,-024,-023,-022,-021,-020,-019,-018,-017,-016,-015,-014,-013,-012,-011,-010,-009,-008,-007,-006,-005,-004,-003,-002,-001,001,002,003,004,005,006,007,008,009,010,011,012,013,014,015,016,017,018,019,020,021,022,023,024,025,026,027,028,029,030,031,032,033,034,035,036,037,038,039,040,041,042,043,044,045,046,047,048,049,050,051,052,053,054,055,056,057,058,059,060,061,062,063,064,065,066,067,068,069,070,071,072,073,074,075,076,077,078,079,080,081,082,083,084,085,086,087,088,089,090,091,092,093,094,095,096,097,098,099,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127
    89. min_max str1
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    edemko
    С чего вы взяли что значения знаковые ?
    Более того вполне вероятно что ТС хотел сказать что это текстовая строка.
     
  8. edemko

    edemko New Member

    Публикаций:
    0
    Регистрация:
    25 ноя 2009
    Сообщения:
    454
    Min = BYTE(0xFF)
    Макро не имеет ограничений на тип данных, но обрабатывает их побайтно.
    Можно написать: sz str1,0,1,2,3,4,5
    Можно написать: sz str2,'stroka1','stroka2',-1,-127,4,5
     
  9. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    Сорь, что вмешиваюсь... Но, просто для информации. Сия личность уже успела создать три топика с таким же названием и содержимым на ксакепе. Два было удалено, в одном даже кто-то ответил кодом. Если интересно я могу поискать ссылку. Личность на вопросы не отвечает, тупо задаёт один и тот же вопрос. Причём каждый раз с созданием нового топика. Я склоняюсь к мысли что это бот.
     
  10. sedoy89

    sedoy89 New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2010
    Сообщения:
    3
    а подскажите это код разве на ассемблере?просто я изучаю програмирование микрокантроллеров семейство AVR,мне тоже попадалась такая задачка,вот частет кода я сомневаюсь и еще если кому не трудно выложите блок схему решения этой задачи:)
     
  11. sedoy89

    sedoy89 New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2010
    Сообщения:
    3
    если не мне память не изменяет,тут надо использовать один из методов поиска