利用循環嵌套將數據段中定義的字符串中的字母大寫


簡介 :

利用嵌套循環將數據段中定義的所有字符串中的字符轉為大寫

意義 :

使用棧機制將外層循環的 cx 寄存器進行保存 , 以防內層循環修改 cx
這是一種非常重要的機制
這就是為什么說棧通常用于保護現場

代碼 :

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

; 將數據段中定義的字符串全部轉為大寫
; 根據數據的特點 : 
;   1. 每個字符串有效的字母為前三位
; 可以使用兩層嵌套的循環來實現

data segment
    db 'dog             '
    db 'god             '
    db 'cat             '
    db 'tac             '

data ends

stack segment

stack ends

code segment

    start:
        ; 設置 ds 數據段寄存器
        mov ax, data
        mov ds, ax
        ; 循環遍歷所有行
        mov cx, 4H
        mov bx, 0H
        my_loop_lines:
            ; 由于兩層循環 , 為了防止內層循環將外層循環的計數器 cx 修改 , 需要將外層循環的 cx 壓棧
            push cx
            mov cx, 3H
            my_loop_char:
                mov al, ds:[bx] 
                and al, 11011111B ; 轉為大寫
                mov ds:[bx], al ; 注意寄存器是 al ( 8 位 )
                inc bx
                loop my_loop_char
            pop cx
            add bx, 10H - 3H ; 之所以要減去 3 是因為需要將 bx 指向下一行的首字符
            loop my_loop_lines

    finish:
        mov ax,4cH
        int 21H

code ends

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

推薦閱讀更多精彩內容