推荐工具Win-Masm
assume cs:code,ds:data
  ;数据段
  ;----------------------------------------------
data segment

data ends

  ;代码段
  ;----------------------------------------------
code segment    
start:
  ;安装do0子程序到0:200h
  ;----------------------------------------------
  mov ax,cs         ;段寄存器之间不准直接传递数据
  mov ds,ax                      
  mov si,offset do0
 
  mov ax,0
  mov es,ax
  mov di,200h
  
  ;movsb将ds:si指向的内存单元中的字节送入es:di中
  ;if(DF==0){ si++;di++} else{si--,di--} 
                 
  mov cx,offset do0end-offset do0  ;设置复制代码的长度
  cld                              ;DF=0  
  rep movsb                        ;等价于while(cx--!=0) movsb;
  
  ;设置中断程序0指向0:200h处
  ;--------------------------------
  mov ax,0
  mov es,ax
  ;中断向量占两个字,高字地址存放段地址,低字地址存放偏移地址
  mov word ptr es:[0*4],200h
  mov word ptr es:[0*4+2],0
  
  ;调用0号中断
  ;---------------------------------
  int 0
   
  ;程序返回dos
  mov ax,4c00h
  int 21h

  ;do0子程序:显示字符串"hello world!"
  ;----------------------------------
do0:
 jmp short do0start
 db "hello world!"

do0start:
 mov ax,0b800h       ;0b800h地址为显存地址
 mov es,ax
 mov di,12*160+36*2
 
 mov ax,cs
 mov ds,ax
 mov si,202h

 mov cx,12
 s:mov al,[si]
   mov es:[di],al
   inc si
   add di,2
 loop s
 
 mov ax,4c00h
 int 21h  
do0end:nop

code ends
end start