问题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. 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, stacksg
mov ss, ax
mov sp, 16 ;这里要把指针指到空栈的位置
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
mov [bx+3+si], al
inc si
loop s
add bx, 16
pop cx
loop s0
mov ax, 4c00H
int 21H
codesg ends
end start
对程序进行汇编与连接。并使用debug进行调试:
我们运行第一步后查看对应的栈内信息:
可以看出栈内情况,如stacksg一致。
经过第一轮大写修改后,可以看到数据段第一个字母被大写成功。
用p指令跳过循环后,观察数据段,第一行的前四个字母已经被大写成功。
同理,我们将所有循环执行完毕,观察改写情况,发现已经全部改写成功。