;make this an MZ magic MS-DOS EXE file
format MZ
entry segcode:start
stack 100h
;define system calls
writes = 9
dos = 21h
exit = 4Ch
;define code segment
segment segcode
;entry point
;note that data addresse are automatically interpreted as relative to the data segment
start: mov ax,segdata ;prepare address of data segment
mov ds,ax ;write data segment address into data segment register
mov dx,0 ;write zero into destination address register
mov ah,writes ;prepare writes system call
int dos ;execute system call
mov ax,segextra ;prepare address of extra segment
mov ds,ax ;write extra segment address into data segment register
mov ah,writes
int dos
mov ah,exit
int dos
;define data segment
;note that the Hello World string is stored at the beginning of the segment at address zero
segment segdata
db 'Hello, world.',13,10,'$'
;define extra segment
;note that the Good Bye string is stored at the beginning of the segment at address zero
segment segextra
db 'Good bye.',13,10,'$'