CrackKay

与您一同分享精彩的网络世界 -486174组织成员

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
assume cs:code,ds:data,ss:stack
data segment
     db 'welcome to masm!',0
data ends

stack segment
     dw 16 dup (0)
stack ends

code segment
kaishi:
     mov ax,data
     mov ds,ax
     mov ax,stack
     mov ss,ax
     mov sp,20H
     mov dh,8
     mov dl,3
     mov cl,2
     mov si,0
     call show_str
     mov ax,4c00h
     int 21h
;参数:dh=行号,dl=列号,cl等于颜色,di:si指向字符串首地址
show_str:
;寄存器保存
     push ax
     push bx
     push cx
     push dx
     push di
     push si
;结束保存

;主程序开始
     mov ax,0B800H
     mov es,ax
     mov bx,0
    
     mov al,160 ;每行160个内存单元
     mul dh  ;ax得到行号
     mov bx,ax ;保存到bx
    
     mov al,2  ;每行80个字符,每个字符后面单元为属性
     mul dl          ;得到显示列号
     mov di,ax          ;保存至di
     mov al,cl     ;把属性给al,因为cl要用来做检测是否为零
     mov ch,0     ;把ch至零
    
;开始显示
xianshi:
    
     mov cl,ds:[si]    ;把内存单元中的字符给cl,因为一个字符等于一个内存单元,所以用cl
     jcxz xianshiover  ;如果检测到cx 为零,那么跳转至结束,如果没有结束,那么向下继续执行
     mov es:[bx+di],cl     ;把cl中的字符复制给es:[bx+di]中的显存地址
     mov es:[bx+di+1],al ;把属性复制给+1的位置
     add di,2               ;目标地址列号+2,因为一个地址放置字符,一个地址放置属性
     inc si                    ;源地址内存单元si+1
     jmp xianshi
xianshiover:
     pop si
     pop di
     pop dx
     pop cx
     pop bx
     pop ax
     ret
    
code ends
end kaishi

 

posted on 2013-04-23 20:43  CrackKay  阅读(125)  评论(0编辑  收藏  举报