Помогите, пожалуйста, написать программу на ассемблере

Тема в разделе "Другие", создана пользователем manya, 15 янв 2011.

  1. manya

    manya Гость

    Написать подпрограмму для автокоррекции ошибок в тексте. Автокоррекция должна заключаться в замене строчных букв в начале предложений на соответствующие прописные буквы. С помощью этой подрограммы обработать два текста. Для передачи параметров использовать стек.
     
  2. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Поможем. Спрашивай что не понятно.
     
  3. manya

    manya Гость

    ну вот, как я понимаю, сначала нужно определить позицию первого символа после точки, отличающегося от пробела... а уже потом непосредственно само преобразание. так?
     
  4. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Да, если подразумевается, что все предложения в тексте заканчиваются точкой. Пробелы после точки мы пропускаем. Ты на верном пути.
     
  5. manya

    manya Гость

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

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Показывай куски. И вообще все что есть. С нуля писать тебе программу на ассемблере нет никакого желания.

    Добавлено: Помочь могу. С нуля писать просто так не буду.
     
  7. manya

    manya Гость

    у меня вопрос еще... найти символ, находящийся после точки, я должна отдельно? а потом уже то, что нашла сравнить с пробелом? или нужно иначе?

    нахождение символа, отличного от пробела:

    cld
    lea DI,Str
    mov cx,length Str
    mov al,' '
    next: scasb
    loope Next
    je NotFound; переход, если в строке все пробелы
     
  8. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Знаешь, Мань, эти строки мне ни о чем не говорят.
    Где Next ? где NotFound ? Где Str ? Ты этот кусок сама написала или взяла где-то?

    Добавлено: Откуда переход на "next:" осуществляется?
     
  9. manya

    manya Гость

    мы этот кусок разбирали...лишь как кусок) есть комментарии к нему

    Добавлено: В строке Str длиной 80 символов найти первый символ, отличный от пробела.
    CLD ;Флаг DF=0 для обработки вперед
    LEA DI, Str ;Загрузка адреса строки
    MOV CX, 80 ;и счетчика циклов
    MOV AL, ' ' ;Загрузка символа для поиска
    Next: SCASB ;Сравнение
    LOOPE Next
    JE NotFound;Переход, если в строке все пробелы
     
  10. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Исходя из твоего кода (а он кажется правильным), первый символ после пробелов у тебя будет по индексу DI в массиве символов Str.
     
  11. manya

    manya Гость

    ну, вероятно, да. но это без учета точки, так? или я не так понимаю...
     
  12. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Я вообще то думал ты этим кодом пробелы после точки пропускала. А теперь, я так понимаю это был весь код?
    В любом случае я ложусь спать. Опиши все доскональна, и если есть еще какие-то куски кода то выкладывай. Завтра посмотрю если будет время.
     
  13. manya

    manya Гость

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

    А точку найти можно, наверно, по алгоритму, подобному алгоритму нахождения символа, отличного от пробела. Или нет?


    Вот кусок преобразования (написан не мною):

    cseg segment
    assume cs:cseg, ds:cseg
    org 100h
    start:
    lea si, str1
    _loop:
    mov al, [si]
    or al, al
    jz _exit
    cmp al, 'A'
    jb _next
    cmp al, 'Z'
    ja _next
    or al, 00100000b
    mov [si], al
    _next:
    inc si
    jmp short _loop

    _exit:
    ret
    str1 db 'ABCdefGHI', 0
    cseg ends
    end start




    Я, вроде, и понимаю, что нужно сделать...но как это сделать на ассемблере...загадка. Прошу помочь, очень прошу...последняя надежда на Вас) ибо я от этого дела далека... а сдать просто необходимо...
     
  14. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Знаешь... Я коварный тип. И безвозмездно никогда не помогаю. Ни-ког-да.
     
  15. manya

    manya Гость

    А возмездно?)
     
Загрузка...

Поделиться этой страницей