第7章 实验6解析
(1).编程,完成问题7.9中的程序。
问题7.9
编程,将datasg段中每个单词的前4个字母改为大写字母。
assume cs:codesg,ss:stacksg,ds:datasg
stacksg segment ;开辟了栈段空间,容量为16个字节
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 ;将栈的段地址放入AX寄存器中
mov ss,ax ;将AX寄存器中的内容放入SS段寄存器中,即栈的段地址
mov sp,16 ;设置栈顶指针
mov ax,datasg ;将数据的段地址放入AX寄存器中
mov ds,ax ;将AX寄存器中的内容放入DS中,即数据的段地址
mov bx,0 ;将0送入BX寄存器中
mov cx,4 ;一共有4个单词,所以外层循环四次
s0:push cx ;将CX中的值入栈保存
mov si,0 ;将0送入SI寄存器中,以便后续寻址使用
mov cx,4 ;每个单词中又要修改四个字母,所以内层循环四次
s:mov al,[bx+si+3] ;将内存单元DS:bx+si+3中的数据送入AL中
and al,11011111b ;改成大写字母
mov [bx+si+3],al ;修改原来的数据
inc si ;si+1指向下一个数据
loop s
add bx,16 ;bx+16指向下一个单词
pop cx ;出栈原来保存的CS中的值
loop s0
mov ax,4c00h
int 21h
codesg ends
end start
将上述程序在DOS中运行后,可使用D命令查看内存单元中的数据如下:
程序未执行前内存单元中的数据如下
程序执行后内存单元中的数据如下
可看到前四个字母修改成了大写