Uploaded by asdasdasd asdasdasd

lab 1

advertisement
Тема урока: «Моя первая программа на ассемблере»
Программа типа ЕХЕ
; 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 –
сегмент кода.
Download