; В этом месте расположен сегмент кода. Он содержит
; выполняющуюся программу.

code    segment

; Директива assume сообщает ассемблеру, как будут
; использоваться сегментные регистры. Эта директива
; не выполняет загрузку сегментных регистров, она
; нужна ассемблеру только для правильного вычисления
; смещений.

	assume cs:code, ds:code

; Эта строка нужна для создания com-программы.

	org 100h

; При запуске программы управление будет передано
; на оператор с меткой start.
; Первое, что должна сделать программа - правильно
; загрузить сегментные регистры.
; Регистр CS загружается операционной системой
; при запуске программы, поэтому его загружать не надо.
; Регистры DS и ES должны указывать на начало
; сегмента кода, так как программа состоит из одного
; сегмента.

start:  mov     ax, cs
	mov     ds, ax

; Выводим сообщение msg из сегмента данных

	mov     ah, 9h
	mov     dx, OFFSET msg
	int     21h

; Завершаем работу программы

	mov     ax, 4C00h
	int     21h

; Строка, которую программа выведет на экран.

msg     db      "Hello, world.", 13, 10, "$"

code    ends

	end     start
