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

我的博客

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

[2012-12-07 11:26] 第11章 实验11

这个实验似乎简单很多,不知是否符合作者的原意图呢?
assume cs:codesg
data segment
        ;db "Beginner's All-purpos Symbolic Instruction code.",0
        db "AaBb89_*&",0
data ends

codesg segment
        start:
                ;
                mov ax,data
                mov ds,ax
                mov si,0
                ;
                call letterc
                
                ;退至dos
                mov ax,4c00h
                int 21h
        ;子程序
        ;程序名称:letterc
        ;功能:将以0结尾的字符串中的小写字母转变为大写
        ;参数:ds:si指向字符首地址
        letterc:
                ;转换小写字母。
                ;小写字母的ascii码范围[97,122]或[61h,7ah]
                ;用到的寄存器:cx,计数,并判断是否结束转换
                ;                          al,用来临时存储字母,并比较
                ;入栈
                push ax
                push cx
                ;清空
                mov ax,0
                mov cx,0
                ;取一个字母
                getOne:
                        mov al,[si]
                        mov cl,al ;送入cx
                        jcxz getOver
                        ;不结束,则判断是否符合条件
                        cmp al,97
                        jb getNext ;如果小于则下一个
                        cmp al,122
                        ja getNext ;如果大于则下一个
                        ;到此则说明在[97,122]区间
                        ;转换,与dfh and之后写回
                        and al,0dfh
                        mov [si],al
                        ;继续下一个
                        getNext:
                        inc si ;增1
                        ;
                        jmp getOne
                getOver:
                ;出栈
                pop cx
                pop ax
                ret ;返回
codesg ends
        end start
评论次数(0)  |  浏览次数(362)  |  类型(汇编作业) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码