问题7.7 将datasg段中每个单词改为大写字母
思路:将暂存的外层循环次数数据放到内存单元中,需要使用的时候再从内存单元中恢复;一般来说,在需要暂存数据的时候,我们应该使用栈。
assume cs:codesg,ds:datasg,ss:stacksg
datasg segment
db 'ibm '
db 'dec '
db 'dos '
db 'vax '
datasg ends
stacksg segment ;定义一个段,用来做栈段,容量为16个字节
dw 0,0,0,0,0,0,0,0
stacksg 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 ;将外层循环的cx值压栈
mov si,0
mov cx,3 ;cx设置为内层循环的次数
s: mov al,[bx+si]
and al,11011111b
mov [bx+si],al
inc si
loop s
add bx,16
pop cx ;从栈顶弹出原cx值,恢复cx
loop s0 ;外层循环的loop指令将cx中的计数值减一
mov ax,4c00H
int 21H
codesg ends
end start
天晴了,起飞吧

浙公网安备 33010602011771号