Читать книгу 20 уроков Ассемблера - Семён Леонидович Углев - Страница 2
Урок 2. Первая программа
ОглавлениеИтак, вот как будет выглядеть наша первая программа.
Не обращайте внимания на излишние комментарии справа от каждого оператора. Это справочная подробная информация для желающих детально разобраться, что происходит в программе. Мы же просто хотим вывести на экран MS-DOS строку «Hello, world!» с помощью программы типа .com. Для вывода текста мы будем использовать функцию 9 прерывания 21h.
Сама программа будет выглядеть примерно так:
Суть достаточно проста.
а. Командой mov ah,9 мы загружаем в регистра ah число 9. На языке "Бейсик" это выглядело бы примерно так: LET A=9. Следует отметить в данном случае, что ah предназначен "для служебного пользования" – в частности, использования тех же функций. Также стоит отметить, что на самом деле ah – это старший байт регистра ax, состоящего на самом деле из двух частей – старшего байта (ah) и младшего (al). Аналогично работают и остальные служебные регистры (bx, cx, dx).
b. Командой mov dx,offset helloworld мы загружаем фразу "Hello, world!". Однако вся фраза, конечно, не поместится в регистр, поэтому мы используем приставку "offset" – смещение. Грубо говоря, это адрес, указывающий компилятору, где на самом деле находится эта фраза. Определим это в конце программы.
c. int 21h – данной командой осуществляем прерывание, то есть собственно вывод текста на экран.
Узнаем об этом поподробнее.
1. Открываем файл "HELP.EXE".
2. Нажимаем любую клавишу.
3. Заходим в раздел "Указатель функций DOS/BIOS".
4. Заходим в раздел "Прерывания DOS".
5. Заходим в раздел "INT 21H".
Последовательность 1-5 в дальнейшем будет обозначена нами так: HELP.EXE -> Указатель функций DOS/BIOS -> Прерывания DOS -> INT 21H
Как стало видно из текста, мы действительно должны загрузить в регистр ah номер желаемой функции (в нашем случае -"9"), и выполнить прерывание (int 21h). Всё просто. Однако, конечно, вышеприведённый текст – не вся программа. Она будет иметь определённые признаки оформления, которые мы будем использовать во всех примерах. Начинаться любая наша программа будет так:
А заканчиваться так:
В середине и будет располагаться наш текст, а чуть ниже него ещё два элемента:
– int 20h – завершающее программу прерывание, выход в DOS. Если его не указать, программа выполнит свою работу и "зависнет".
– helloworld db 'Hello, world!$' – собственно определение переменной helloworld.
Директива db (define byte) определяет область памяти, доступную побайтно. Фраза "Hello, world!" указана в одинарных кавычках, а за знаком "!" указан знак "$" – конец строки. Почему так, поясним чуть позже. Что ещё следует знать, что определяем переменные мы в самом конце, чтобы при ассемблировании их не приняли за команды ассемблера. Итак, полностью оформленный текст программы будет выглядеть чуть более обширно.
Совет: разберитесь со структурой файла помощи HELP.EXE!