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

  • Автор темы manya
  • Дата начала
M

manya

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

manya

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

lazybiz

Well-known member
03.11.2010
1 339
0
#4
Да, если подразумевается, что все предложения в тексте заканчиваются точкой. Пробелы после точки мы пропускаем. Ты на верном пути.
 
M

manya

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

lazybiz

Well-known member
03.11.2010
1 339
0
#6
Показывай куски. И вообще все что есть. С нуля писать тебе программу на ассемблере нет никакого желания.

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

manya

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

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

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

lazybiz

Well-known member
03.11.2010
1 339
0
#8
Знаешь, Мань, эти строки мне ни о чем не говорят.
Где Next ? где NotFound ? Где Str ? Ты этот кусок сама написала или взяла где-то?

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

manya

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

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

lazybiz

Well-known member
03.11.2010
1 339
0
#10
у меня вопрос еще... найти символ, находящийся после точки, я должна отдельно?у меня вопрос еще... найти символ, находящийся после точки, я должна отдельно?
Исходя из твоего кода (а он кажется правильным), первый символ после пробелов у тебя будет по индексу DI в массиве символов Str.
 
M

manya

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

lazybiz

Well-known member
03.11.2010
1 339
0
#12
Я вообще то думал ты этим кодом пробелы после точки пропускала. А теперь, я так понимаю это был весь код?
В любом случае я ложусь спать. Опиши все доскональна, и если есть еще какие-то куски кода то выкладывай. Завтра посмотрю если будет время.
 
M

manya

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

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


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

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




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