CrackKay

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

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
assume cs:code,ds:data,ss:stack

data segment
     db 10 dup (0)
data ends

stack segment
     dw 16 dup (0)
stack ends

code segment
start:
     mov ax,12666
     mov bx,data
     mov ds,bx
     mov bx,stack
     mov ss,bx
     mov si,0
     call dtoc
    
     mov dh,8
     mov dl,3
     mov cl,2
     call show_str
    
     mov ax,4c00h
     int 21h
;程序开始,参数:ax等于被除数,ds:si指向要转换的首地址
dtoc:
     mov dx,0               ;先至零dx一次
     push dx                    ;然后push dx=0,用于后面pop cx=0检测
     mov bx,10               ;除数
chufa:
     mov dx,0
     div bx                    ;得到余数以及商
     mov cx,ax               ;检测商是否为零
     add dl,30H               ;余数+30H等于字符串16进制的ascii码
     push dx                    ;保存dx
     jcxz xrnc               ;商不为零则向下继续执行,为零则跳转
     jmp chufa
xrnc:
     pop cx                    ;弹出余数至零
     mov ch,0               ;ch至零,因为开始压入一个dx=0
     jcxz dtocover          ;如果为零则跳转结束
     mov ds:[si],cl          ;不为零则复制至ds:[si]数据段
     inc si    
     jmp xrnc
    
dtocover:
     mov si,0               ;至si为零,因为show_str程序参数需要
     ret
    
    
;参数: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 start
    

     

 

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