简介 :
利用嵌套循环将数据段中定义的所有字符串中的字符转为大写
意义 :
使用栈机制将外层循环的 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