Тема урока: «Моя первая программа на ассемблере» Программа типа ЕХЕ ; hello-2.asm .model small .stack 100h .code start: mov ax,DGROUP mov ds,ax mov dx,offset message mov ah,9 int 21h mov ax,4C00h int 21h .data message db “Не11о word!”,0Dh,0Ah,’$’ end start Первая строка определяет модель памяти SMALL, код занимает один сегмент, данные и стек объединены в одну группу с именем DGROUP. Директива .СОDЕ начинает сегмент кода, который в нашем случае также должен содержать и данные. Метка start располагается перед первой командой в программе и будет использоваться в директиве end, чтобы указать, с какой команды начинается программа. Команда mov ax,dgroup загружает в АХ сегментный адрес группы сегментов данных DGROUP. mov ds,ax копирует в регистр ds. Команда mov dx,offset message - помещает в регистр DХ смещение метки МЕSSАGЕ относительно начала сегмента данных, который в нашем случае совпадает с сегментом кода. Команда mov ah,9 помещает число 9 в регистр АН - номер функции DОS «вывод строки». Команда int 21h вызывает системную функцию DOS. Эта команда - основное средство взаимодействия программ с операционной системой. В нашем примере вызывается функция DОS номер 9 - вывести строку на экран. Эта функция выводит строку от начала, адрес которого задается в регистрах DS:DХ, до первого встреченного символа $. mov ax,4C00h это стандартное завершение процесса в DOS. message db “Hello word!”, 0Dh,0Ah,'$’ - определяет строку данных, содержащую текст Не11о word!, управляющий символ АSСII возврат каретки с кодом 0Dh, управляющий символ АSСII перевод строки с кодом 0Ah и символ $, завершающий строку. Эти два управляющих символа переводят курсор на первую позицию следующей строки точно так же, как в строках на языке С действует последовательность \n. Директива ЕND завершает программу. В этом примере определяются 3 сегмента: data – сегмент данных, stack – сегмент стека, code – сегмент кода.