Другие языки программирования и технологии

Почему на компонуется программа (Ассемблер)

MODEL SMALL .STACK 100h .DATA Message DB 'Привет!',13,10,'$' .CODE mov ax,@Data mov dx,ax ; установить регистр DS таким ; образом, чтобы он указывал ; на сегмент данных mov ah,9 ; функция DOS вывода строки mov dx,OFFSET Message ; ссылка на сообщение "Привет!" int 21h ; вывести "Привет!" на экран mov ah,4ch ; функция DOS завершения ; программы int 21h ; завершить программу END
Во-первых перед MODEL точку поставь.
Во вторых, укажи точку входа (место с которого програ будет выполняться) .
В-третьих, инициаллизируй не dx, a ds :)

.MODEL SMALL
.STACK 100h
.DATA
Message DB 'Привет! ',13,10,'$'
.CODE
start: mov ax,@Data ;точка входа на этой строке
mov ds,ax ;инициализация регистра DS
mov ah,9
mov dx,OFFSET Message
int 21h ;вывод сообщения на экран
mov ah,4ch
int 21h ;выход из програмы
END start ;пишем название точки схода, чтобы процессор знал, откуда стоит выполнять программу
DZ
Darkhan Zh.
1 517
Лучший ответ
Попробуйте таааак:
MODEL SMALL
.STACK 100h
.DATA
Message DB 'Привет! ',13,10,'$'
.CODE
mov ax,OFFSET Message ; ссылка на сообщение "Привет! "
mov dx,ax ; установить регистр DS таким
; образом, чтобы он указывал
; на сегмент данных
mov ah,9 ; функция DOS вывода строки
int 21h ; вывести "Привет! " на экран
mov ah,4ch ; функция DOS завершения
; программы
int 21h ; завершить программу
END

Или так:
MODEL SMALL
.STACK 100h
.DATA
Message DB 'Привет! ',13,10,'$'
.CODE
mov ax,[dx]
mov dx,ax ; установить регистр DS таким
; образом, чтобы он указывал
; на сегмент данных
mov ah,9 ; функция DOS вывода строки
mov dx,OFFSET Message ; ссылка на сообщение "Привет! "
int 21h ; вывести "Привет! " на экран
mov ah,4ch ; функция DOS завершения
; программы
int 21h ; завершить программу
END