汇编语言 循环嵌套 将datasg段中每个单词改为大写字母 改进版

题目要求

将datasg段中每个单词改为大写字母
在这里插入图片描述

思路

注意用al存放ascii即可
大写对应的ascii第五位是0,除了第五位以外不变 and al,11011111b
注意循环嵌套的时候 只有一个cx不够用怎么办 可以放在dx中临时存储 等内循环执行完毕后 再从dx中将cx取出 即可正常嵌套循环

改进:将cx放栈中 这样使用push pop指令更方便 并且解决寄存器数量有限的问题

运行过程

执行前:所有行都是小写
在这里插入图片描述
执行完一遍外循环:第一行变成大写
在这里插入图片描述
执行完所有外循环:所有行都变成大写
在这里插入图片描述
程序结束

代码(原始)

在这里插入图片描述

;将datasg段中每个单词改为大写字母
;注意用al存放ascii即可
;;大写对应的ascii第五位是0,除了第五位以外不变 and al,11011111b
assume cs:code,ds:datasg

datasg segment
	db 'ibm             '
	db 'dec             '
	db 'dos             '
	db 'vax             '
datasg ends

code segment
start:
		;把datasg地址放到ds中
		mov ax,datasg
		mov ds,ax
		mov si,0
		
		mov cx,6			;6行 循环6次
s1:		;外循环6
		mov dx,cx			;用dx暂存cx
		mov bx,0			;从第0个字母开始
		
		mov cx,3			;改变3个字母 3次循环
s2:		;内循环
		mov al,ds:[si+bx]	;取出
		and al,11011111b	;改成大写
		mov ds:[si+bx],al		;放回
		inc bx
		loop s2				;内循环底部
		
		mov cx,dx			;把外循环的cx还给它
		mov ax,si			;借助ax
		add ax,10h			;借助ax指向下一行
		mov si,ax			;ds指向下一行
		loop s1				;外循环底部
		
		mov ax,4c00h
		int 21h
code ends
end start

改进后

题目有一点点小的变化:

题目要求

编程,将datasg段中每个单词的前4个字母改为大写字母
在这里插入图片描述

*本次改进,增加了对栈的使用

运行过程

执行一次外循环后,第一行单词前三个字母被改为大写
在这里插入图片描述
执行所有外循环后,所有单词前三个字母被改为大写,成功~
在这里插入图片描述
代码

还是图片版代码看着舒服 有高亮
在这里插入图片描述

;编程,将datasg段中每个单词的前4个字母改为大写字母
assume cs:codesg,ss:stacksg,ds:datasg

stacksg segment stack
	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:		
		;把datasg地址放到ds中
		mov ax,datasg
		mov ds,ax
		
		;把stacksg地址放到ss中
		mov ax,stacksg
		mov ss,ax
		mov sp,10h			;设置栈顶
		
		mov si,0			;si控制行数
		
		;外循环6
		mov cx,6			;6行 循环6次
s1:		push cx				;cx值存入栈
		mov bx,3			;从第3个字符开始
		
		;内循环3
		mov cx,3			;改变3个字母 3次循环
s2:		mov al,ds:[si+bx]	;取出
		and al,11011111b	;改成大写
		mov ds:[si+bx],al	;放回
		inc bx
		loop s2				;内循环底部
		
		pop cx				;cx的值pop回去
		mov ax,si			;借助ax
		add ax,10h			;借助ax指向下一行
		mov si,ax			;ds指向下一行
		loop s1				;外循环底部
		
		mov ax,4c00h
		int 21h
codesg ends
end start

猜你喜欢

转载自blog.csdn.net/sinat_42483341/article/details/88690969