编程,将datasg段中每个dan单词的前四个字母改为大写字母。(每个字符串长度为16字节)
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. replace '
db '4. modify '
datasg ends
codesg segment
start :
codesg ends
end start
个人代码:
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. replace '
db '4. modify '
datasg ends
codesg segment
start :
mov ax,datasg
mov ds,ax
mov ax,stacksg
mov ss,ax
mov sp,16
mov si,0
mov cx,4
s:
push cx
mov bx,3
mov cx,4
t:mov al,ds:[bx+si]
and al,11011111b
mov ds:[bx+si],al
inc bx
loop t
pop cx
add si,0010h
loop s
mov ax,4c00h
int 21h
codesg ends
end start
分析:思路要清晰,我打算用bx定位字符串中单词的前四个字母,si定位字符串,循环分两层,内层循环控制字符串中的单词,外层循环控制字符串。所以在每次内层循环开始前,要将bx置为3,即外层循环开始时bx置为3。执行内层循环之前,先将cx中的值入栈,执行过后再出栈。