Ввод даных АСМ!Срочно!

Тема в разделе "WASM.ASSEMBLER", создана пользователем xaxa89, 19 дек 2008.

  1. xaxa89

    xaxa89 New Member

    Публикаций:
    0
    Регистрация:
    19 дек 2008
    Сообщения:
    6
    Сразу к делу!Нужно сделать лабу на завтра, как говорится вся ночь в переди!=)
    Само задание пока не важно да и там проблем не должно...пока... не возникало...
    Смысл в том что нужно ввести массив целых чисел со знаком с клавиатуры. Препод сказал с помощбю прерывания int21. Сюда пишу само собой не для того что б за меня все сделали!
    Немного разобрался... функция 0ah! Как с ней работать я разобрался, НО если скажем мне нужно ввести -123 то в памяти оно займет 4 байта, знак и цифры как символы по 1 байту...а мне получается нужно что оно все записывалось ну SWORD к примеру


    З.Ы. Юзаю масм, Если важно задача:"Подсчитать кол-во отрицательных елементов на парных позициях масива из 10 елементов".


    Обьясните как ввести эти гребаные цифры!!! ПЛИЗ
     
  2. DarkWanderer

    DarkWanderer New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    333
    Адрес:
    Барнаул.
    Ну конвертировать там.. смотреть, есть ли знак '-'.. да и готовых функций много в сети.
    Если проверить только отрицательность, то можно смотреть первый символ введенных строк и не преобразовывать в число.
     
  3. xaxa89

    xaxa89 New Member

    Публикаций:
    0
    Регистрация:
    19 дек 2008
    Сообщения:
    6
    эт мне типа нужно проверить если первый символ введен "-" то отрицательное... а потом конвертить цифры после него???
    если так то я понимаю что алгоритм такой:
    Если введен "-" то мы после ввода, к примеру цифру умножаем число на -1??? или как???
    А если нет "-" то мы так эго и оставляем...
    Правильно?
     
  4. DarkWanderer

    DarkWanderer New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    333
    Адрес:
    Барнаул.
    Не-а. Или проверить первый символ и считать число отрицательным без конвертирования. Или сконвертировать, а потом считать. Умножать на минус один (neg) нужно, но при конвертировании.
     
  5. xaxa89

    xaxa89 New Member

    Публикаций:
    0
    Регистрация:
    19 дек 2008
    Сообщения:
    6
    тогда такой вопрос как "считать число отрицательным без конвертирования"?
     
  6. DarkWanderer

    DarkWanderer New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    333
    Адрес:
    Барнаул.
    Посмотреть, '-' ли у него первый байт. В строке.
     
  7. xaxa89

    xaxa89 New Member

    Публикаций:
    0
    Регистрация:
    19 дек 2008
    Сообщения:
    6
    Сделал если кому интересно...
    Код (Text):
    1. ;Подсчет колва отрицательных елементов на парных позициях
    2. CSEG segment
    3. org 100h
    4.  
    5. _beg:
    6. COUNTER SBYTE ?     ;Наш счетчик
    7. MAS SBYTE 10 DUP(0) ;Оглашаем инициализированый масив, заполненый нулями
    8. mov bx,00h      ;обнуляем индексный регистр.
    9. mov cx,0ah      ;цикл 10 раз прогнать.
    10. mov COUNTER,00h
    11.  
    12. CYCL:
    13.  
    14. MOV ah,01h      ;читаем символ.
    15. INT 21h         ;прервались.
    16.  
    17. CMP al,2Dh      ;проверяем не минус ли мы ввели.
    18. JZ minus
    19.  
    20.     sub al,30h  ;конвертация в цифру.
    21.     jmp finish  ;прыгаем дальше работать.
    22. minus:
    23.     mov ah,01h  ;нам нужно еще один прочитать если минус
    24.     int 21h     ;прервались
    25.     sub al,30h  ;конвертация
    26.     neg al      ;сделали отрицательным
    27. finish:
    28.     mov MAS[bx],al  ;Записываем в масив введеное значение из регисра al
    29.     add bx,1    ;увеличиваем значение индексного регистра
    30.  
    31. loop CYCL       ;лупаемся
    32.  
    33.  
    34. mov cx,05h      ;цикл 5 раз прогнать.
    35. mov COUNTER,0
    36. mov bx,0        ;обнуляем индексный регистр.
    37. CYCL2:
    38.  
    39.     cmp MAS[bx],0   ;сравниваем с нулем флажок SF(Флаг знака) поднят
    40.     JS negat
    41.     jmp fin2
    42.     negat:
    43.     inc COUNTER ;увеличиваєм значение счетчика на 1
    44. fin2:
    45. add bx,2
    46. loop CYCL2      ;лупаемся
    47.  
    48. mov ah,02h      ;подготовка и вызов функции 02h прерывания 21h
    49. mov dl,3Eh      ;для вывода символа с кодом 3Eh что обозначает ">"
    50. int 21h         ;прервались=)
    51.  
    52. add COUNTER,30h     ;Преобразовуем число в строчное  значение для вывода
    53. mov ah,02h      ;загружаем номер функции
    54. mov dl,COUNTER      ;Значение символа для вывода
    55. int 21h         ;прервались=)
    56.  
    57. MOV ah,4Ch      ;Bye-Bye
    58. INT 21h
    59.  
    60. CSEG ends
    61. end _beg
     
  8. DarkWanderer

    DarkWanderer New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    333
    Адрес:
    Барнаул.
    Программа вводит десять чисел (которые почему то должны быть в интервале [-9;9]) и считает количество отрицательных на четных позициях.
    "на парных позициях масива" означает именно четные смещения?
    Будет лучше вводить строку, а потом ее всю сразу конвертировать. Тогда числа могут быть больше чем из одной цифры.
     
  9. DarkWanderer

    DarkWanderer New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    333
    Адрес:
    Барнаул.
    __tp://subscribe.ru/archive/comp.prog.assembler/200702/05160534.html
     
  10. xaxa89

    xaxa89 New Member

    Публикаций:
    0
    Регистрация:
    19 дек 2008
    Сообщения:
    6
    спс за ссылку!
    В следующий раз учту...просто на момент написания программы было уже много много за полночь...и я соображал очень туго...я решил упростить немного себе задачу...я пока учусь...

    парных=четных, украинский дает о себе знать;)

    а с конвертацией всей строки я обязательно сделаю...даже интересно
     
  11. DarkWanderer

    DarkWanderer New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    333
    Адрес:
    Барнаул.
    дерзайте;)