汇编语言 : 子程序设计 ( 字符串转大写自动判断长度 )


简介 :

设计一个子程序 , 功能 : 
将一个全是字母 , 以 0 结尾的字符串 , 转化为大写

分析 :

如果我们实现不知道字符串的长度 , 那么我们应该如何去将一个小写单词转成大写呢 ? 
可以很容易就想到 , 我们一般是使用 00000000B 来标示一个字符串的结尾
那么我们只需要在转换的时候对字符进行判断 , 如果这个字符为 0 了 , 那么就说明这个字符串已经结束
就停止转换

代码 :

assume cs:code,ds:data,ss:stack

data segment
    db "Freedom",0
data ends

stack segment
    db 16 dup(0)
stack ends

code segment

    start:
        ; 初始化数据段寄存器
        mov ax, data
        mov ds, ax
        ; 初始化栈段寄存器
        mov ax, stack
        mov ss, ax
        ; 初始化栈偏移地址寄存器
        mov sp, 00A0H
        ; 初始化指向字符的寄存器
        mov si, 0
        call string_upper
        ; 结束程序
        jmp finish
    ; 功能 : 将一个小写的英文单词的所有字符转换为大写
    ; 参数 : si 为该字符串首个字符在内存中数据段的偏移地址
    ; 返回 : None
    string_upper:
        each_char:
            mov ch, 00H
            mov cl, ds:[si]
            jcxz success ; 当 cx 为 0 , 则说明遇到了 0 的字符 , 这个字符串也就结束了
            call char_upper
            mov ds:[si], cl ; 将大写字符再存回去
            inc si
            jmp each_char
        success:
            ret
    ; 功能 : 将一个小写英文字符转换为大写字符
    ; 参数 : cl
    ; 返回 : cl
    char_upper:
        and cl, 11011111B ; 转大写
        ret

    finish:
        mov ax,4cH
        int 21H

code ends

end start

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容