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

我的博客

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

[2009-11-22 10:01] 实验10 第3题

除法,要用32位除以16位,16位除以8位的话,会溢出。
余数存放下来,还要进行逆序操作。

        assume  cs:code
data    segment
        db      10 dup(0)
data    ends
stack   segment
        db      16 dup(0)
stack   ends
code    segment
start:  mov     ax,stack
        mov     ss,ax
        mov     sp,1ah
        mov     ax,65535
        mov     bx,data
        mov     ds,bx
        mov     si,0
        call    dtoc
        mov     si,0
        call    nixu
        mov     dh,8
        mov     dl,3
        mov     cl,2
        mov     si,0
        call    show_str
        mov     ax,4c00h
        int     21h

dtoc:   mov     ch,0
        mov     bx,10
s:      mov     dx,0                ;防止溢出,用32位除以16位
        div     bx
        or      dl,30h
        mov     [si],dl
        inc     si
        mov     cx,ax
        jcxz    ok
        mov     ax,cx
        jmp     short s
ok:     ret

nixu:   mov     ch,0                ;将余数逆序存放
s1:     mov     cl,[si]
        jcxz    ok1
        push    cx
        inc     si
        jmp     s1
ok1:    mov     di,0
        mov     cx,si
s2:     pop     ax
        mov     [di],al
        inc     di
        loop    s2
        ret

show_str:
        push        ax
        push        bx
        push        cx
        push        dx
        push        si
        push        es
        dec     dh                ;行号减一
        mov     al,0a0h
        mul     dh                ;0a0h*(行号-1)
        mov     dh,0
        dec     dl
        add     dx,dx                ;2*(列号-1)
        add     ax,dx                ;0a0h*(行号-1)+2*(列号-1)
        mov     bx,ax
        mov     ch,0                ;ch清零,为cx进栈(颜色)做准备
        mov     ax,0b800h
        mov     es,ax                ;显存段地址
s3:     push    cx              ;颜色进栈
        mov     cl,[si]                ;取出一个字符
        jcxz    ok2             ;是零则返回
        mov     es:[bx],cl        ;不是零,放显存相应单元
        inc     bx
        pop     cx                ;取回颜色
        mov     es:[bx],cl        ;存颜色
        inc     bx
        inc     si
        jmp     short s3        ;修改指针并循环
ok2:    pop     cx              ;返回前,将刚才进栈的cx出栈,使栈顶指针指向返回地址
        pop        es
        pop        si
        pop        dx
        pop        cx
        pop        bx
        pop        ax
        ret

code    ends
        end     start

做了课设1,才惊觉怎么这个题目没有用第二题的子程序?!
评论次数(0)  |  浏览次数(549)  |  类型(汇编作业) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码