汇编网首页登录博客注册
mahdi_glt的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
最新评论
最新留言
文章收藏
友情链接

[2011-04-28 22:30] 第十章 试验十 第三题 数值显示

assume cs:code

data segment
        db 10 dup (0)
data ends

code segment
start:mov ax,12666
        mov bx,data
        mov ds,bx
        mov si,0
        call dtoc

        mov dh,8
        mov dl,3
        mov cl,2
        call show_str
        
        mov ax,4c00h
        int 21h

;---------------------------dtoc------------------------------
dtoc:push ax
        push bx
        push cx
        push dx
        push di
        push si

        mov bx,10

dtoc_s1:mov dx,0     ;做32位的除法,因为12666/10=1266 al中放不下
        
        div bx       ;除了以后 以为余数小于10,所以肯定在dl中,商在ax中
        add dl,30h   ;转换成ascii
        mov cx,ax    
        mov byte ptr ds:[si],dl
        inc si
        jcxz dtoc_ok      ;判断商是否为0,如果为0则跳转
        jmp short dtoc_s1
dtoc_ok:mov byte ptr ds:[si],0

        mov bl,2
        mov ax,si
        div bl             ;计算出需要几次换位,把次数保存在al中
        
        dec si             ;指向最大的数
        mov di,0           ;指向最小的数

        mov ch,0
        mov cl,al
dtoc_s2:mov al,ds:[si]
        mov ah,ds:[di]
        mov ds:[si],ah
        mov ds:[di],al
        dec si
        inc di
        loop dtoc_s2
        
        pop si
        pop di
        pop dx
        pop cx
        pop bx
        pop ax
        ret
;---------------------------dtoc------------------------------
;-------------------------show_str---------------------------------
show_str:push dx
        push cx
        push bx
        push es
        push di
        push si
        push ax

        mov ax,0b800h
        mov es,ax         ;指向显示缓冲段

        mov al,0a0h       ;用乘法算出行的地址用BX保存
        mul dh
        mov bx,ax

        mov al,2          ;用乘法算出列的地址用DI保存
        mul dl
        mov di,ax

        add bx,di         ;计算出要显示字符的第一个二维数组的地址
        
        mov dl,cl        ;用dl保存颜色数据
        
show_str_s1:mov ch,0      ;用cx读取字符 如果为0则跳转到 show_str_ok处
        mov cl,ds:[si]
        jcxz show_str_ok

        mov byte ptr es:[bx],cl
        mov byte ptr es:[bx+1],dl
        add bx,2
        inc si
        jmp short show_str_s1

show_str_ok:pop ax
        pop si
        pop di
        pop es
        pop bx
        pop cx
        pop dx
        ret

;-------------------------show_str---------------------------------
code ends
end start

这用到了我前面写的两个子程序,直接COPY到这个程序里面就可以实现调用了
评论次数(0)  |  浏览次数(416)  |  类型(我的代码) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码