将datasg段中每个单词的前四个字母改为大写字母
assume cs:codesg,ss:stacksg,ds:datasg
stacksg segment
dw 0,0,0,0,0,0,0,0 # 8个字单元用作栈空间
stacksg ends
datasg segment
db '1. display '
db '2. brows '
db '3. replace '
db '4. modify '
datasg ends
codesg segment
mov ax,stacksg
mov ss,ax # 定义栈段
mov sp,16 # 定义栈底
mov ax,datasg
mov ds,ax # 定义数据段
mov bx,0 # 定义数据段偏移
mov cx,4 # 定义外层循环次数
s0: push cx # 将外层循环次数压栈
mov si,0 # 定义字符串偏移
mov cx,4 # 定义内层循环次数
s: mov al,[bx+3+si] # 将要处理的字母放入低位寄存器
and al,11011111b # 将小写字母转换为大写,大写字母第6位为0
mov [bx+3+si],al # 将处理完的字母传回原本的字符串位置
inc si # 字符串偏移自增
loop s # 内层循环
add bx,16 # 数据段偏移处理
pop cx # 将保存的外层循环次数存入cx寄存器
loop s0 # 外层循环
mov ax,4c00h
int 21h
codesg ends
end start