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

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
  •  做不了第一个就做最好的, 做不了最好的就做第一个。
  • 『姓名』:
  • 『性别』:保密『发送消息
  • 个人说明:不要执着于学习步骤, 宁愿多看点知识
  • 详细信息『加为好友』
学习动态
最新留言
友情链接

[2009-06-04 20:53] 实验11 细心就成

图片载入中
assume cs:codesg

datasg segment
    db "Binginner's All-purpose Sysmbolic Instruction Code.",0
datasg ends

codesg segment
start:  
    mov ax,datasg
    mov ds,ax
    mov si,0

    mov dh,5
    mov dl,5
    mov cl,11111001b    ;白底高亮闪烁蓝字
    
    call cls    ;清屏
    
    call show_str   ;原始字串
    
    call letterc

    mov dh,7
    mov dl,5
    mov cl,11111001b
    call show_str   ;转换后

    mov ax,4c00h
    int 21h




    ;名称:letterc
    ;功能:将以 0 结尾的字符串中的所有小写字母转换成大写的
    ;参数:ds:si 指向字符串首地址
    letterc:        
        push si
        push cx
      do:
        mov ch,0
        mov cl,ds:[si]
        jcxz exit
        cmp cl,97   ;97是小写 a
        jb next
        cmp cl,122
        ja next
        and cl,11011111b    ;小写转大写,注意不要将 and 写成 add
        mov byte ptr ds:[si],cl     ;这句一定不能忘记,要不然白转换了
    next:
        inc si        
        jmp short do        ;注意不要写成 jmp short ptr do
      exit:
        pop cx
        pop si        
        ret
        

    
    
    ;名称:show_str
    ;功能:在指定的位置用指定的颜色,显示一个用0结束的字符串
    ;参数:(dh) = 行号(0~24),(dl) = 列号(0~79)
    ;      (cl) = 颜色,ds:si指向字符串的首地址
    ;返回:无        
    show_str:
        push ax
        push es
        push dx
        push bx
        push cx
        push di
        push si
                                
        mov ax,0b800h
        mov es,ax                
        mov al,160
        mul dh
        mov bx,ax
        mov al,2
        mul dl
        add bx,ax
        mov dl,cl                        ;dl暂存颜色属性
        mov ch,0
        mov di,0
    show:        ;显示
        mov cl,ds:[si]
        jcxz ok
        mov byte ptr es:[bx+di],cl        ;偶地址字符
        mov byte ptr es:[bx+di+1],dl        ;奇地址属性
        inc si
        add di,2
        jmp short show
      ok:
        pop si
        pop di
        pop cx
        pop bx
        pop dx
        pop es
        pop ax                
        ret
   

        ;清屏子程序
    cls:
        push ax
        push es
        push di
        push cx

        mov ax,0b800h
        mov es,ax
        mov di,0
        mov cx,2000                ;循环2000次
      go:
        mov byte ptr es:[di+1],00h        ;00h即黑底黑字
        add di,2
        loop go

        pop cx
        pop di
        pop es
        pop ax
        ret

codesg ends
end start
评论次数(1)  |  浏览次数(1003)  |  类型(实验) |  收藏此文  | 

[  maxm   发表于  2009-06-04 20:58  ]

这实验没难度,关键是细心
几个易出错的地儿我都在注释中做了标记
希望大家别跟我一样犯糊涂 (*^__^*) 

当然这个清屏子程序是有问题的,因为命令行的背景色不一定是黑色 (*^__^*)

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码