《汇编语言》第7章 更灵活的定位内存地址的方法——实验6

本篇介绍《汇编语言》第7章 更灵活的定位内存地址的方法的实验

(1)将程序中所有讲解过的程序上机调试,用debug跟踪其执行过程,并在过程中进一步理解所讲内容。

大小写转换

assume cs:codesg,ds:datasg
datasg segment
	db 'BaSiC'
	db 'iNfOrMaTiOn'
datasg ends

codesg segment
start:	mov ax,datasg
		mov ds,ax			;设置ds指向datasg段
		mov bx,0			;设置(bx)=0,ds,bx指向’BaSiC‘的第一个字母
		mov cx,5			;设置循环次数5,因为’BaSiC‘有5个字母
		
	s:	mov al,[bx]			;将ASCII码从ds:bx所指向的单元中取出
		and al,11011111B	;将al中的ASCII码的第5位置为0,变为大写字母
		mov [bx],al			;将转变后的ASCII码写回原单元
		inc bx				;(bx)加1,ds:bx指向下一个字母
		loop s
		
		mov bx,5			;设置(bx)=5,ds:bx指向'iNfOrMaTiOn'的第一个字母
		mov cx,11			;设置循环次数11,因为’iNfOrMaTiOn‘有11个字母
		
	s0:	mov al,[bx]
		or al,00100000B		;将al中的ASCII码的第5位置为1,变为小写字母
		mov [bx],al
		inc bx
		loop s0
		
		mov ax,4c00H
		int 21H
codesg ends
end start

debug调试:

 

 第一轮循环前面5个字符变大写

 

 第二轮循环后11个字符变小写

SI和DI,BX的使用

assume cs:code,ds:data
data segment
	db 'unIX'
	db 'foRK'
data ends

code segment
start:	mov bx,0
		mov ax,[bx]			;将ds:[bx]代表的内存单元移入ax中
		mov ax,cs:[bx]		;将cs:[bx]代表的内存单元移入ax中
		mov ax,es:[bx]		;将es:[bx]代表的内存单元移入ax中
		mov ax,ss:[bx]		;将ss:[bx]代表的内存单元移入ax中
		
		mov si,0
		mov ax,[si]			;将ds:[si]代表的内存单元移入ax中
		mov ax,cs:[si]		;将cs:[si]代表的内存单元移入ax中
		mov ax,es:[si]		;将es:[si]代表的内存单元移入ax中
		mov ax,ss:[si]		;将ss:[si]代表的内存单元移入ax中
		
		mov di,0
		mov ax,[di]			;将ds:[di]代表的内存单元移入ax中
		mov ax,cs:[di]		;将cs:[di]代表的内存单元移入ax中
		mov ax,es:[di]		;将es:[di]代表的内存单元移入ax中
		mov ax,ss:[di]		;将ss:[di]代表的内存单元移入ax中
		
		mov ax,4c00H
		int 21H
code ends
end start

debug调试:

BX的使用调试

 

 

 

  

 SI的使用调试

 

 

  DI的使用调试

 

 

 

(2)编程,完成问题7.9中的程序。

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 ax,datasg
		mov ds,ax
		mov bx,0
		mov cx,4
	
	s0: push cx		;保存最外层循环的次数
		mov si,0
		mov cx,4	;cx设置为内层循环的次数
		
	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调试:

 

 

 

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值