;顯示字符就是往顯存里寫進要顯示的東西。每個字符占顯存中兩個字節,低字節是字符的ASCII碼
;高字節是設置所示字符的屬性.每位都定義有顯示屬性,從高位到低位依次是      
;閃爍   背景紅   背景綠   背景藍   高亮   前景紅   前景綠   前景藍  
  assume   cs:code,ds:data  
  data   segment  
  db   'www.csdn.net',0  
  data   ends  
  code   segment  
      start:mov   ax,data  
  mov   ds,ax  
  mov   si,0  
  mov   ax,0b800h           ;寫顯存  
  mov   es,ax  
  mov   di,160*12+60     ;顯示字符在屏幕上的位置  
              s:mov   al,[si]  
  cmp   al,0                     ;遇到0了顯示就終止  
  je   over   
  mov   byte   ptr   es:[di],al          ;把數據段的字符的ASCII碼傳進顯存   
  mov   byte   ptr   es:[di].1,89h    ;這句設定字符顯示屬性,顏色、背景、閃爍。                                                                               ;屬性字節可以不寫   
  inc   si  
  add   di,2           ;每個字符占兩個字節,所以加2   
  loop   s   
  over:mov   ax,4c00h  
  int   21h  
  code   ends  
  end   start  
===========================================================
mov   di,160*12+60  
第12行第30列,一行80個字符,每個字符2個字節,這樣就可以推出一行160字節。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 名稱: show_str
; 功能: 指定位置顯示字符串
; 參數: dh=行號[0..24]
;       dl=列號[0..79]
;       cl=color
;       ds:si指向字符串首地址
; 返回: 無
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
assume cs:code
data segment
  db 'Welcome to masm',0
data ends

code segment
start:
  mov cl,2
  mov ax,data
  mov ds,ax
  mov si,0
  call show_str
over:
  mov ax,4c00h
  int 21h
show_str:
  mov di,8*160+3*2 ;指向指定的行列
  mov ax,0b800h
  mov es,ax        ;顯存地址
s:
  mov ah,BYTE ptr [si]
  cmp ah,0
  je over
  mov BYTE ptr es:[di],ah ;寫入字符
  inc di
  mov BYTE ptr es:[di],cl ;寫入字符屬性
  inc di
  inc si
  jmp short s
code ends
end start
-------------------------------------
這樣自己寫了按照意思寫了一個果然是這樣的。