(1)
问题7.9
将datasg段中每个单词的前4个字母改为大写
assume cs:codesg,ss:stacksg,ds:datasg
stacksg segment
dw 0,0,0,0,0,0,0,0
stacksg ends
datasg segment
db '1. display ';定义字节数据
db '2. brows '
db '3. repalce '
db '4. modify '
datasg ends
codesg segment
start:
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,3;前三个字节不是目标字母
mov cx,4;内循环中的四个字母的循环次数
s: mov al,[bx+si]
and al,11011111b;小写转大写
mov [bx+si],al
inc si
loop s
add bx,16;第一行共16字节,(bx)+ 16 跳到下一行
pop cx
loop s0
mov ax,4c00h
int 21h
codesg ends
end start
调试过程:
程序开始时,可以用-u来查看datasg的地址,mov ax,datasg,中可以查看datasg的段地址