利用循环嵌套将数据段中定义的字符串中的字母大写


简介 :

利用嵌套循环将数据段中定义的所有字符串中的字符转为大写

意义 :

使用栈机制将外层循环的 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

你可能感兴趣的:(利用循环嵌套将数据段中定义的字符串中的字母大写)