匯編語言 : 子程序設計 ( 字符串轉大寫自動判斷長度 )


簡介 :

設計一個子程序 , 功能 : 
將一個全是字母 , 以 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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容