16.08.2018, 13:53 [+3 UTC]
в нашей команде: 2 914 чел. | участники онлайн: 6 (рекорд: 21)

:: РЕГИСТРАЦИЯ

:: задать вопрос

:: все разделы

:: правила

:: новости

:: участники

:: доска почёта

:: форум

:: блоги

:: поиск

:: статистика

:: наш журнал

:: наши встречи

:: наша галерея

:: отзывы о нас

:: поддержка

:: руководство

Версия системы:
7.47 (16.04.2018)

Общие новости:
13.04.2018, 10:33

Форум:
16.08.2018, 11:45

Последний вопрос:
16.08.2018, 11:42

Последний ответ:
12.08.2018, 20:20

Последняя рассылка:
15.08.2018, 21:45

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
23.01.2012, 06:52 »
Даровко Антон Владимирович
Я просмотрел Ваше решение моей задачи и ставлю Вам оценку отлично. [вопрос № 185237, ответ № 269700]
29.03.2010, 15:10 »
Botsman
Большое спасибо за развернутый ответ! [вопрос № 177540, ответ № 260441]

РАЗДЕЛ • Assembler

Создание программ на языке Assembler.

[администратор рассылки: Лысков Игорь Витальевич (Старший модератор)]

Лучшие эксперты в этом разделе

Зенченко Константин Николаевич
Статус: Модератор
Рейтинг: 311
Kdsfofwe21
Статус: 1-й класс
Рейтинг: 220
cain52
Статус: 1-й класс
Рейтинг: 3

Перейти к консультации №:
 

Консультация онлайн # 140985
Раздел: • Assembler
Автор вопроса: Alena De Lon
Отправлена: 29.07.2008, 15:52
Поступило ответов: 1

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

Приложение:

Состояние: Консультация закрыта

Ответ # 226975 от 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
Дата отправки: 29.07.2008, 16:46

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 140985

Зенченко Константин Николаевич
Модератор

ID: 31795

# 1

= общий = | 29.07.2008, 17:43 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

© Цитата:
Что в данном случае обозначают квадратные скобки, я не вижу в отладчике что происходит когда в [ di ] заносится ah (11 строка).


В своём примере Вы уже использовали несколько видов адресации.
1) Регистровая адресация : mov di,dx - записать в регистр DI значение которое хранится в регистре ВХ.
2) Непосредственная адресация : mov ah,0ah - записать в регистр непросредственное значение 0Аh.
3) Прямая адресация : mov dx,offset buffer - записать в регистр адрес ячейки памяти.
4) Косвенная адресация : mov [ di ],ah - значение регистра записать по адресу в который хранится в регистре DI.
5) Адресация по базе с индексированием : mov byte ptr [ di+bx ],'$' - байт записать по адресу полученному из суммы регистров DI и ВХ.

=====
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.
smile


Посетитель

ID: 183051

# 2

= общий = | 29.07.2008, 18:17 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Спасибо всем кто ответил!:-)
Если вы все-таки знаете сайты, где есть ПОДРОБНЕЙШЕЕ описанее о способах адресации, да еще и с примерами, то ПОЖАЛУЙСТА, подскажите!

Зенченко Константин Николаевич
Модератор

ID: 31795

# 3

= общий = | 29.07.2008, 18:40 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Почитайте эту книгу С.В. Зубков: Ассемблер для DOS, Windows и Unix, ещё А.Б. Крупник(на второй странице: Дэвид Брэдли, Питер Абель, Виктор Юров, В.Ю. Пирогов, на третей: С.В. Зубков: Assembler. Язык неограниченных возможностей).
Лично я начинал с книг С.В. Зубкова.

=====
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.
smile

Зенченко Константин Николаевич
Модератор

ID: 31795

# 4

= общий = | 29.07.2008, 18:47 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

В книге С.В. Зубков: Ассемблер для DOS, Windows и Unix, я нашел строение команд ассемблера. Адресация любой команды задается в самой команде. Советую купить т.к. в электронной версии нет полного описания ОП-кодов всех команд.

=====
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.
smile


Посетитель

ID: 183051

# 5

= общий = | 29.07.2008, 22:23 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Спасибо, Константин Николаевич!:-)

 

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.14110 сек.

© 2001-2018, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.47 от 16.04.2018