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

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


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

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

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

Выпуск № 1043
от 03.08.2008, 20:35

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

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


Вопрос № 140985: Здравствуйте, Уважаемые эксперты!!!:-) Объясните, пожалуйста, как работает эта программа, а именно что происходит с 8-15 строки. Что в данном случае обозначают квадратные скобки, я не вижу в отладчике что происходит когда в [di] заносится ah (11 с...
Вопрос № 141007: Здравствуйте, уважаемые эксперты! У меня вопрос по главе 10 книги О.Калашникова "Ассемблер?Это просто!" В книге, после заголовка "Как проверить работу программы" автор предлагает проверить работу разбираемой в этой главе рез...

Вопрос № 140.985
Здравствуйте, Уважаемые эксперты!!!:-)
Объясните, пожалуйста, как работает эта программа, а именно что происходит с 8-15 строки. Что в данном случае обозначают квадратные скобки, я не вижу в отладчике что происходит когда в [di] заносится ah (11 строка).
И еще, подскажите, пожалуйста, где в инете найти на конкретных примерах способы адресации на ассемблере.
Заранее СПАСИБО!!!

Приложение:

Отправлен: 29.07.2008, 15:52
Вопрос задала: Alena De Lon (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 5)

Отвечает: Airyashov
; программа считывает строку символов в буфер, затем отображает на экране.
;Функция DOS 0Ah - Считать строку символов из STDIN в буфер
1. .model tiny
2. .code
3. org 100h
4. start:
5. mov ah,0ah; процедура ввод строки
6. mov dx,offset buffer
7. int 21h
;======================================
8. inc dx; адрес буффера ввода +1, теперь dx указывает на dlina - кол-во введенных символов
9. mov di,dx; di=dx адрес переменной dlina
10. mov bl,[di]; записать значение байта по адресу находящемуся в di в bl, кол-во введенных символов, bl=dlina
11. mov [di],ah; записать ah по адресу находящемуся в di, dlina=ah
12. xor bh,bh ;Можно и без этого, но! лучше так.
13. inc di ;di=di+1 теперь di содержит адрес начала строки text
14. mov byte ptr [di+bx],'$' ; записать в конец строки знак доллар, адрес начала строки+кол-во символов в строке
15. dec ah; ah=0Ah-1=09h функция вывод строки
;======================================
16. int 21h
17. ret
buffer db 10 ; максимальная длина ввода строки
dlina db 0 ; фактическая длина ввода
text db 10 dup() ; фактически ввод размещается здесь

end start
Ответ отправил: Airyashov (статус: 6-ой класс)
Ответ отправлен: 29.07.2008, 16:46
Оценка за ответ: 5


Вопрос № 141.007
Здравствуйте, уважаемые эксперты!
У меня вопрос по главе 10 книги О.Калашникова "Ассемблер?Это просто!"
В книге, после заголовка "Как проверить работу программы" автор предлагает проверить работу разбираемой в этой главе резидентной программы(в приложении - прога 1) таким образом:
1)запустить вначале прогу1.
2)после того, как прога1 завершит свою работу запустить прогу2(ее я тоже указал в приложении)
посмотреть что происходит, и
3)запустить прогу2 в отладчике(у меня AFD). Сделал все это.
Затем ,когда я захожу внутрь прерывания 21h, код у меня отладчик показывает совсем не тот, который по идее должен быть(как в книге), а именно:
в книге:
(программа прога2 выполнила команду int 21h)
int 21
cmp ah,09
jz 010C и так далее
у меня:
(программа прога2 выполнила команду int 21h)
int21
nop
nop
call 1161
jmp Far cs:[1048]
nop
nop и так далее
Но по идее после перехвата прерывания вариант должен быть первый! почему у меня происходить совсем другое???Делаю все вроде бы верно, кучу раз проверил...В итоге прерывание перехватывается, нужная строка на экран выводится, но вот в отладчике не то, что нужно...почему???

Приложение:

Отправлен: 29.07.2008, 20:31
Вопрос задал: Limelight (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: Airyashov
В данной ситуации Вы попадаете в родной обработчик DOS, а не в перехваченный, думаю Вы неправильно запускаете программу (проверил и других мыслей просто нет), если работайте под Windows, поробуйте так
На диске "C" сделайте папку "1", туда скопируете исколняемые файлы программы 1, 2 и отладчик.
Затем запустите командную строку "Пуск/Выполнить/cmd.exe"
В консольном окне введите следующие команды
cd
cd 1
1.com
adf 2.com
и сделайте трасировку, надеюсь все получится как в книге описано удачи!
Ответ отправил: Airyashov (статус: 6-ой класс)
Ответ отправлен: 30.07.2008, 09:11
Оценка за ответ: 5
Комментарий оценки:
Спасибо! Все получилось!


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

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

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

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

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

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


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


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

∙ Версия системы: 5.0 alpha от 21.07.2008

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

В избранное