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

我的博客

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

[2010-09-07 13:19] 习题4.16

写一个程序在屏幕上依次循环显示10个数字符号,每行13个。最初所显示如下:
0 1 2 3 4 5 6 7 8 9 0 1 2
3 4 5 6 7 8 9 0 1 2 3 4 5


答:
;-----------------------------------------------------
assume        cs:code
code        segment
start:
        mov si,0     ;初始化字符个数
        mov di,0     ;初始化行数
        mov bx,13    ;除数,按题目要求第十三个字符后换行
s0:        mov dx,30h   ;初始化字符0
s1:        mov ah,2     ;打印
        int 21h
        push dx      ;打印空格,故dx入栈保护
        mov dl,' '
        mov ah,2
        int 21h
        pop dx       ;打印完成, 恢复dx
        inc si       ;字符增量
        push dx      ;要进行除法运算,故保护dx
        xor dx,dx    ;扩展高16位
        mov ax,si    ;
        div bx
        cmp dx,0     ;如果个数被13整除
        jnz s2       ;继续打印
        call cr      ;打印换行
        inc di       ;行数加1
        cmp di,10    ;是否打印完成?
        jz done      ;是,结束运行
        pop dx       ;否则,恢复dx。 继续
        inc dx       ;指向下一字符
        jmp s1       ;继续打印
s2:        pop dx       ;恢复dx
        inc dx       ;继续打印
        cmp dx,39h   ;字符不能大于9
        ja s0
        jmp s1        

done:        mov ah,4ch
        int 21h
;回车子程序
cr        proc
        mov dl,0dh
        mov ah,2
        int 21h
        mov dl,0ah
        mov ah,2
        int 21h
        ret
cr        endp
;
code        ends
end        start
;-----------------------------------------------------
测试:

d:\MASM>416
0 1 2 3 4 5 6 7 8 9 0 1 2
3 4 5 6 7 8 9 0 1 2 3 4 5
6 7 8 9 0 1 2 3 4 5 6 7 8
9 0 1 2 3 4 5 6 7 8 9 0 1
2 3 4 5 6 7 8 9 0 1 2 3 4
5 6 7 8 9 0 1 2 3 4 5 6 7
8 9 0 1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0 1 2 3
4 5 6 7 8 9 0 1 2 3 4 5 6
7 8 9 0 1 2 3 4 5 6 7 8 9

d:\MASM>
评论次数(0)  |  浏览次数(285)  |  类型(汇编习题集) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码