Вопрос № 130394: Здравствуйте, уважаемые эксперты. Не получается сделать лабораторную, не знаю как работать со строкой.
Дана строка типа "abc cde efg". Нужно вывести на экран да, если каждое следующее слово в строке начинается с того символа, на которы...Вопрос № 130426: Уважаемые экперты. Я не работаю в ассемблере, но один из моих знакомых школьников задал интересную задачку. Пример взят из классической книги Абеля. Я немного подредактировал программу для простоты, но синтаксис сохранил. Программа проста. Выводится ...Вопрос № 130449:
Здраствуйте уважаемые эксперты, помогите мне написать программу в которой:
Дан массив из десяти знаковых чисел (слов или байт). Требуется:
1. Найти количество отрицательных чисел. Массив байт.
2. Найти сумму всех положительных и отрицател...Вопрос № 130496: Здравствуйте!
Хотел бы узнать следующий момент.
Резидент может перехватить int 20h и этим, допустим, можно отслеживать завершение работы пользовательской программы.
А как можно отследить запуск пользовательской программы из командной стро...
Вопрос № 130.394
Здравствуйте, уважаемые эксперты. Не получается сделать лабораторную, не знаю как работать со строкой.
Дана строка типа "abc cde efg". Нужно вывести на экран да, если каждое следующее слово в строке начинается с того символа, на который заканчивается предыдущий, и нет в противном случае..
заранее спасибо !
Отправлен: 03.04.2008, 15:28
Вопрос задал: Cauze (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Airyashov
Здравствуйте, Cauze!
предлогаю такой алгоритм
ввести строку с клавиатуры
заменить символ конца ввода 0Dh пробелом, он всегда есть, при корректном вводе
если введено более 0 символов
удалить пробелы, если есть перед первым словом
найти последний символ слова, затем первый следующего и сравнить их если не равны то "нет" и завершится.
если равны далее проверяем, закончилачь строка "да" и завершится
!!!есть одно допушение если введено одно слово, то выведет "да"
model small
stack 200h
.data
in_str db 50,0,51 dup(0);
yes_s db 10,13,"yes",10,13,'$'
no_s db 10,13,"no",10,13,'$'
.code
.startup
mov ax,0a00h
mov dx, offset in_str
int 21h
xor ch,ch
mov cl,in_str[1]
cmp cx,0; сколько символов введено?
jz in_error ;выход из программы с сообщением об ошибке
repe scasb
int 3
jcxz in_error ; нашли первый непробельный символ или кончилась строка
dec di
inc cx
int 3
next:
repne scasb; ищем последний символ слова
dec di
inc cx
mov bl,in_str[di-1];сохраним его в bl
repe scasb; ищем первый символ следующего слова
jcxz yes; кончилась строка "Да"
cmp bl,in_str[di-1];сравним полученные символы
jnz no; "Нет"
jmp next
no: mov dx ,offset no_s
jmp mes
yes:mov dx ,offset yes_s
mes:mov ax, 0900h
int 21h
in_error:
mov ax,4c00h
int 21h
end
Ответ отправил: Airyashov (статус: 2-ой класс)
Ответ отправлен: 03.04.2008, 16:53
Вопрос № 130.426
Уважаемые экперты. Я не работаю в ассемблере, но один из моих знакомых школьников задал интересную задачку. Пример взят из классической книги Абеля. Я немного подредактировал программу для простоты, но синтаксис сохранил. Программа проста. Выводится запрос, вводится текст и этот текст выводится ниже. Всё на 21-м прерывании. Вроде ничего сложного. Когда вводишь текст полностью заполнющий допустимый объем в переменной ima label byte проблем нет. Но вот когда вводишь текст состоящий из 2-х, 3-х, до 7-ми символов,
то выводятся они очень интересно. Или вообще не выводятся или обрезаются. Почему? Ведь 21-е прерывание выводит все данные до знака '$'. А здесь как-то обрезается. Причем именно первые символы. Непонятно. Я не нашел ответа на этот вопрос. Помогите разобраться. Программа проста и вроде всё как на ладони, а разобраться не могу. Все работы проводил в Win98. Тескт программы в приложении. Благодарю за помощь.
Приложение:
Отправлен: 03.04.2008, 20:04
Вопрос задал: Monah23 (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 4)
Отвечает: Airyashov
Здравствуйте, Monah23!
программа работаетабсалютно правильно, только после ввода в буфере оказывается еще и символ с кодом 0dh, это перевод курсора в начало строка, так что вывод осуществляется так, выводится символы в позицию 5,2 после вывода символов обрабатывается символ 0dh, курсор в начало строки уходит, а далее выводятся пробелы из буфера и затирают сообщение уже выведенное
сомое простое решение объявить
vima db 0ah dup('$'),'$'
Ответ отправил: Airyashov (статус: 2-ой класс)
Ответ отправлен: 03.04.2008, 22:56
Отвечает: Zetasm
Здравствуйте, Monah23!
На мой взгляд более правильным будет найти в введенной строке символ перевод курсора в начало строки (0Dh) и его замена на символ '$'.
Мой вариант решения в приложении.
Приложение:
Ответ отправил: Zetasm (статус: 2-ой класс)
Ответ отправлен: 04.04.2008, 00:13
Вопрос № 130.449
Здраствуйте уважаемые эксперты, помогите мне написать программу в которой:
Дан массив из десяти знаковых чисел (слов или байт). Требуется:
1. Найти количество отрицательных чисел. Массив байт.
2. Найти сумму всех положительных и отрицательных чисел. Массив байт
3. Найти количество положительных чисел. Массив байт.
Результаты вычислений вывести на экране дисплея.
Зарание благодарна.
Отправлен: 03.04.2008, 21:40
Вопрос задала: Batva (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Зенченко Константин Николаевич
Здравствуйте, Batva!
Программа в приложении.
Удачи!
Приложение:
--------- И только наступив на грабли мы приобретаем драгоценный опыт!
Ответ отправил: Зенченко Константин Николаевич (статус: Профессионал) Украина, Киев Тел.: +380958380164 Адрес: Украина г.Киев ---- Ответ отправлен: 09.04.2008, 12:12
Вопрос № 130.496
Здравствуйте!
Хотел бы узнать следующий момент.
Резидент может перехватить int 20h и этим, допустим, можно отслеживать завершение работы пользовательской программы.
А как можно отследить запуск пользовательской программы из командной строки DOS?
Я думал о перехвате int 9h и таким образом можно собирать строку, введенную пользователем, до нажатия <Enter>. Но пока мы в командной строке DOS – все хорошо, а вот когда вошли в пользовательскую программу, резидент уже не должен отслеживать клавиатуру.
Запуск пользовательской программы из командной строки осуществляет функция DOS 4Bh. Резидентная программа в приложении перехватывает INT 21h и блокирует вызов функции 4Bh, после запуска этого резидента запустить пользовательскую программу из командной строки уже нельзя.
Приложение:
Ответ отправил: Trulala (статус: 1-ый класс)
Ответ отправлен: 06.04.2008, 22:10