《汇编语言》 第3版 (王爽)实验6解析

第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命令查看内存单元中的数据如下:
程序未执行前内存单元中的数据如下
在这里插入图片描述程序执行后内存单元中的数据如下
在这里插入图片描述
可看到前四个字母修改成了大写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值