Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2012, 14:54   #1
pavelslap
Пользователь
 
Регистрация: 08.02.2009
Сообщений: 73
Смущение Hello world

Код:
.model tiny											;Модель памяти
.code												;Начинаем сегмент кода
org 100h											;Переходим на 256-й байт

program:											;Метка - начало (указываем, что здесь начало программы)
	mov ah,9										;9 - номер функции DOS "вывод строки"
	mov dx,offset message							;Помещаем в dx смещение метки message относительно начала сегмента данных		
	int 21h											;Вызываем функцию DOS номер 9
	ret												;Возврат управления из процедуры вызывающей программе. 
	message db "Hello World!",0Dh,0Ah,'$'
end program
1) Почему цифра 9 помещается именно в ah, а не куда либо?
2) Почему offset message помещается именно в dx, а не куда либо?
3) Как взаимодействуют ah и dx
4) int 20h и ret это то же самое? Как я понял это возврат управления из процедуры вызывающей программе. А где эта вызывающая программа? Если это всё что вне метки program: то почему после ret идёт ещё одна строчка (она что пропускается?).
5) Почему строчка "message db "Hello World!",0Dh,0Ah,'$'" идёт в конце, а не в начале. Получается строчка "mov dx,offset message ", которая записывает адрес сообщения перескакивает вперёд и потом перескакивает назад?

Спасибо.
pavelslap вне форума Ответить с цитированием
Старый 25.04.2012, 15:40   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

вы вызываете функцию MS DOS (int 21h)
для каждой из функций задаются ВХОДНЫЕ параметры, что делает функция, и выходные параметры.

вот описание функции AH=9 - 09H Display Text
Цитата:
Код:
 Expects: AH    09H
          DS:DX address of a string terminated with a '$' (ASCII 24H)
          ────────────────────────────────────────────────
 Returns: none
          ────────────────────────────────────────────────
    Info: The string, up to the terminating character '$' is sent to the
          Standard Output.

          Backspaces are handled as in the 02H Display Char function.

          The Normal procedure for displaying a 'newline' is to embed a
          CR/LF pair (ASCII 0dH followed by ASCII 0aH) in the string.

          Strings containing '$' may be printed via 40H Write File (BX=0).
т.е. разработчики MS DOS сказали, что эта функция определяется кодом в AH
а какой текст выводить, находится по адресу DS:DX.
кроме того, эта строчка обязательно должна иметь знак '$' в конце.


Цитата:
3) Как взаимодействуют ah и dx
?????!!
никак!

Цитата:
5) Почему строчка "message db "Hello World!",0Dh,0Ah,'$'" идёт в конце, а не в начале. Получается строчка "mov dx,offset message ", которая записывает адрес сообщения перескакивает вперёд и потом перескакивает назад?
потому что эта строчка представляет собой ДАННЫЕ! Данные, в отличие от кода НЕ ВЫПОЛНЯЮТСЯ. Это ТЕКСТ, который будет выведен.



p.s. может Вам книжки какие для начинающих почитать!
Методом тыка изучать Ассемблер - это не очень продуктивно!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
hello world lamer69 Visual C++ 9 12.05.2011 22:26
Hello World Syltan Общие вопросы по Java, Java SE, Kotlin 17 14.05.2010 11:21
Hello world Faydaen Общие вопросы C/C++ 2 27.09.2009 22:57
Hello, world! LepihinMS Общие вопросы C/C++ 6 10.06.2008 13:20