Hello world на ассемблере для DOS (COM,EXE) и WINDOWS
Пример COM программы для MS-DOS
.386
model tiny ;Указание модели памяти
Code segment use16 ;Начало описания сегмента кода
ASSUME cs:Code, ds:Code ;Ассоциация регистров с сегментом
org 100h ;Генерация смещения на 256 байт
start: ;Метка начала программы
push cs ;Запись регистра CS в стек
pop ds ;Загрузка регистра DS значением из стека
mov dx, offset mess ;Помещение в DS смещения строки mess
mov ah, 09h ;Запись в AH номера функции вывода строки
int 21h ;Вызов сервиса MS-DOS
int 20h ;Завершение COM программы в MS-DOS
mess db 'Hello world!','$‘ ;Объявление строки
Code ends ;Завершение описания строки
end start
Пример EXE программы для MS-DOS
.386
model small ;Указание модели памяти
Stack SEGMENT STACK use16 ;Объявление сегмента стека
ASSUME ss:Stack ;Ассоциация регистра SS с сегментом стека
DB 100h dup(?) ;Резервирование 256 байт под стек
Stack ENDS ;Завершение описания сегмента стека
Data SEGMENT use16 ;Объявление сегмента данных
ASSUME ds:Data ;Ассоциирование регистра DS с сегментом данных
mess db 'Hello world!','$‘ ;Объявление строки
Data ENDS ;Завершение описания сегмента данных
Code SEGMENT use16 ;Объявление сегмента кода
ASSUME cs:Code ; Ассоциирование регистра CS с сегментом кода
start: ;Метка начала программы
mov ax, seg mess ;Загрузка в AX адреса сегмента строки mess
mov ds, ax ;Запись в DS значения AX
mov dx, offset mess ;Запись в DX смещения строки mess
mov ah, 09h ;Запись в AH номера функции вывода строки
int 21h ;Вызов сервиса MS-DOS
mov ax, 4c00h ;Запись в AX функции завершения программы
int 21h ;Завершение EXE программы в MS-DOS
Code ENDS ;Завершение описания сегмента данных
end start
Пример EXE программы для Windows
include \masm32\include\masm32rt.inc ;Подключение библиотеки
;Объявление сегмента неинициализированных данных
.data?
value dd ? ;Объявление переменной без инициализации
;Объявление сегмента инициализированных данных
.data
item dd 0 ; Объявление переменной с инициализацией
.code ;Объявление сегмента кода
start: ;Метка начала программы
call main ;вызов процедуры main
inkey ;вызов макроса ожидания нажатия клавиши
exit ;вызов макроса завершения программы
main proc ;объявление процедуры main
cls ;вызов макроса очистки экрана
print "Hello World!",13,10 ;вызов макроса вывода сообщения
ret ;команда выхода из процедуры
main endp ;конец описания процедуры
end start