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

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


Хостинг Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг на Windows 2008

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

Чемпионы рейтинга экспертов в этой рассылке

Лысков Игорь Витальевич
Статус: Специалист
Рейтинг: 203
∙ повысить рейтинг >>
Зенченко Константин Николаевич
Статус: Профессор
Рейтинг: 109
∙ повысить рейтинг >>
Boriss
Статус: Профессор
Рейтинг: 25
∙ повысить рейтинг >>

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

Выпуск № 1163
от 21.01.2009, 05:35

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

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

Вопрос № 157751: Здравствуйте, эксперты, может кто встречал такое: <div style="margin:15px; margin-top:10px"><div><b><font color="gray">Код:</font></b></div><pre style="margin: 0px; padding: 6px; border: 1px inset; width: 650px; height: 100px; text-align: left; ov...


Вопрос № 157760: Эксперты помогите написать программу типа com к заданию: Дан массив из десяти знаковых чисел(слов и байт).Требуеться: заменить все отрицательные числа нулями. Массив байт....
Вопрос № 157817: Здравствуйте уважаемые эксперты!!! Я недавно начал изучать ассемблер по книге Калашникова и эксперементировал с программами ( листинг 1.2 и 2.5). Суть в том , что я удалил из обоих программ прерывание int 20h и ничего не изменилось, т.е программы как...
Вопрос № 157833: Здравствуйте! Вопрос по книге Калаш никова. В листинге 10.4 мы писали программу, которая перехватывал прерывание 21h. Объясните пожалуйста подробно, для чего в обработчике мы заносим в стек регистры: push ds, push dx, push cs После по...

Вопрос № 157.751
Здравствуйте, эксперты, может кто встречал такое:
Код:
mov ah,2
mov dl,7
int 21h

или
Код:
mov ax,0e07h
int 10h

должен выдавать сигнал на динамик, но не работает в простой линейной программе, для примера
Код:
.model small ; модель пямяти для программы типа EXE
.stack 100h ; сегмент стека
.data ; сегмент данных
.code ; сегмент кода
@start: ; точка входа в программу
mov ax,@data; инициализация семента данных
mov es,ax
mov ds,ax
mov ax,0200h
mov dx,2
int 21h
mov ax,0e07h ;вывести символ с кодом - 7 звонок
int 10h
;выход из программы
mov ax,4c00h ; функция DOS завершение программы
int 21h ; вызов DOS
end @start

но если я перехватываю прерывание таймера 1Ch, в нем выполняю такой код, то все прекрасно работает
Отправлен: 15.01.2009, 11:16
Вопрос задал: Airyashov (статус: Студент)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 8)

Отвечает: Лысков Игорь Витальевич
Здравствуйте, Airyashov!
Приведенная программа тоже прекрасно работает :)
Только надо вставить в конце ожидание нажатия на клавишу, а еще лучше зациклить: выводить код beep-а, пока не ESC
Дело в том, что программа просто не успевает пропищать, в силу инерционности виртуальной машины ДОС-а под ХР, как тут же завершается "молча" :)
---------
Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: Специалист)
Ответ отправлен: 15.01.2009, 11:35

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 241254 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!

    Оценка за ответ: 5


    Вопрос № 157.760
    Эксперты помогите написать программу типа com к заданию: Дан массив из десяти знаковых чисел(слов и байт).Требуеться: заменить все отрицательные числа нулями. Массив байт.
    Отправлен: 15.01.2009, 13:09
    Вопрос задала: Грязнева Ольга Михайловна (статус: Посетитель)
    Всего ответов: 1
    Мини-форум вопроса >>> (сообщений: 2)

    Отвечает: Airyashov
    Здравствуйте, Грязнева Ольга Михайловна!
    Код:

    mov si,9
    next:
    mov al,massiv[si]
    test al,al
    jns neotr
    mov byte ptr massiv[si],0
    neotr:
    dec si
    jns next
    Ответ отправил: Airyashov (статус: Студент)
    Ответ отправлен: 15.01.2009, 13:21

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 241268 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Вопрос № 157.817
    Здравствуйте уважаемые эксперты!!! Я недавно начал изучать ассемблер по книге Калашникова и эксперементировал с программами ( листинг 1.2 и 2.5). Суть в том , что я удалил из обоих программ прерывание int 20h и ничего не изменилось, т.е программы как работали так и работают!! Прошу Вас обьяснить мне (доступно ) для чего нужно это прерывание и почему у меня программы работают без него.
    Отправлен: 15.01.2009, 21:51
    Вопрос задал: Sergey1966 (статус: Посетитель)
    Всего ответов: 1
    Мини-форум вопроса >>> (сообщений: 3)

    Отвечает: Лысков Игорь Витальевич
    Здравствуйте, Sergey1966!
    int 20h используется для выхода из программы и возврата управления вызвавшей программе (обычно командному интепретатору)
    Полностью эквивалентна командам mov ah,0 int 21h
    Особенностью этой команды является то, что она требует, чтобы регистр CS указывал на сегмент PSP.
    Т.о. эта команда приспособлена для программ модели TINY, т.е. формата COM.
    Команды mov ah, 4ch int 21h являются более универсальным способом выхода из программы, в этом случае не требуется совпадение CS=PSP
    Замечу, иногда программы завершаются кодом ret (длинным или коротким), при этом предполагается, что происходит возврат на адрес PSP:0,
    где, кстати, записана команда int 20h, которая и завершает программу.

    Далее, что происходит, если мы уберем int 20h? Нормального завершения, естественно не произойдет.
    Программа "пойдет" дальше отрабатывать все, что встретит на своем пути! Наверняка, встретит код , который не соответствует никакой команде! Произойдет исключение,
    в результате которого система просто-напросто "прибивает" Вашу программу! Должна же система как-то защищаться в подобной ситуации :)
    ---------
    Удачи!
    Ответ отправил: Лысков Игорь Витальевич (статус: Специалист)
    Ответ отправлен: 16.01.2009, 09:29

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 241337 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Вопрос № 157.833
    Здравствуйте! Вопрос по книге Калашникова. В листинге 10.4 мы писали программу, которая перехватывал прерывание 21h. Объясните пожалуйста подробно, для чего в обработчике мы заносим в стек регистры:
    push ds,
    push dx,
    push cs
    После по правилам нужно вытягивать все в обратном порядке, но мы сначала пишем Pop ds, почему??

    Приложение:

    Отправлен: 16.01.2009, 01:07
    Вопрос задал: Loginleon (статус: Посетитель)
    Всего ответов: 1
    Мини-форум вопроса >>> (сообщений: 1)

    Отвечает: Лысков Игорь Витальевич
    Здравствуйте, Loginleon!
    Все очень просто. Первыми двумя push-ами
    Push ds
    Push dx

    мы действительно сохраняем в стеке ds и dx
    А вот следующими двумя строками
    Push cs ;адрес строки должен быть в ds:dx
    Pop ds
    мы заносим в ds значение из cs, т.о. ds становится равным cs

    ---------
    Удачи!
    Ответ отправил: Лысков Игорь Витальевич (статус: Специалист)
    Ответ отправлен: 16.01.2009, 01:34

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 241327 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


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

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

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

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

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

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


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

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров >>

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


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

    ∙ Версия системы: 5.13 от 01.12.2008

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

    В избранное