В любом текстовом редакторе создадим текст программы.
1)Определим сегмент стека. Так как наша программа невелика, следовательно и стек в ней может быть небольшой.
_STACK SEGMENT PARA STACK 'STACK' ; определение сегмента
;стека
DB 32 DUP ('ST') ; стек размером 64 байта (32 повторения символов ST)
_STACK ENDS ; закроем описание сегмента стека _STACK
2) Определим сегмент данных. В сегменте данных должны содержаться все данные, используемые в программе.
_DATA SEGMENT PUBLIC 'DATA' ; сегмент данных
CONS_1 DB 10 ; первая константа с именем CONS_1 размером в байт и
;значением =10
CONS_2 DB 10 ; вторая константа
RESULT DB ? ; резервируем байт под результат
_DATA ENDS ; закроем описание сегмента данных _DATA
3) Определим сегмент кода. В нем содержатся команды программы.
_CODE SEGMENT PUBLIC 'CODE' ; Объявление сегмента кода
ASSUME SS:_STACK, CS:_CODE, DS:_DATA ; Ассоциируем
;сегменты и сегментные регистры
OUR_PROG PROC FAR ; описываем нашу программу как процедуру
;OUR_PROG помещаем в стек такие начальные значения, чтобы
; программа могла по завершению возвратить управление
; вызвавшей ее программе (например ОС)
PUSH DS ; поместить в регистр номер блока адреса возврата
MOV AX,0 ; обнулить регистр AX
PUSH AX ; поместить в стек нулевое смещение адреса возврата
; инициализируем адрес сегмента данных
MOV AX,_DATA ;
MOV DS,AX ; загрузка через AX указателя сегмента данных в DS
MOV RESULT,0 ; обнуляем переменную результата
MOV AL,CONS_1 ; пересылаем первую константу в младшие 8
; бит регистра AX
CMP AL,CONS_2 ; сравниваем со второй константой
JNE EQ ; если они не равны, то переход по метке EQ
MOV RESULT,1 ; иначе переменной результата присваиваем 1
EQ: RET ; команда возврата из процедуры, она
; извлекает данные, которые мы положили в
; стек в начале программы
OUR_PROG ENDP ; закрываем описание процедуры OUR_PROG
_CODE ENDS ; закрываем описание сегмента кода _CODE
END OUR_PROG ; закрываем описание программы