Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Ассемблер? Это просто! Учимся программировать


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler (Ассемблер)

Выпуск № 1018
от 09.04.2008, 15:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 346, Экспертов: 22
В номере:Вопросов: 4, Ответов: 5

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>


Вопрос № 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 ;выход из программы с сообщением об ошибке

mov si,cx
mov in_str[2][si], ' ' ;строка заканчивается пробелом
inc cx

cld
mov ax,@data
mov es,ax
mov al,' '
mov di, offset in_str[2]; начало строки

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 – все хорошо, а вот когда вошли в пользовательскую программу, резидент уже не должен отслеживать клавиатуру.
Отправлен: 04.04.2008, 10:21
Вопрос задал: Бартосик Феликс Михайлович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Trulala
Здравствуйте, Бартосик Феликс Михайлович!

Запуск пользовательской программы из командной строки осуществляет функция DOS 4Bh. Резидентная программа в приложении перехватывает INT 21h и блокирует вызов функции 4Bh, после запуска этого резидента запустить пользовательскую программу из командной строки уже нельзя.

Приложение:

Ответ отправил: Trulala (статус: 1-ый класс)
Ответ отправлен: 06.04.2008, 22:10


Вы имеете возможность оценить этот выпуск рассылки.
Нам очень важно Ваше мнение!
Оценить этот выпуск рассылки >>

Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2008, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале

∙ Версия системы: 4.72.8 от 05.04.2008

Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное