编写一个汇编语言程序,将字符串"Hello World"中的全部小写字母转换为大写字母,并存放回原地址处。

两盒软妹~` 提交于 2019-12-22 21:45:21

编写一个汇编语言程序,将字符串"Hello World"中的全部小写字母转换为大写字母,并存放回原地址处。

P176
4.10

编程思路:首先DATA段中,定义string存放字符串"Hello World",LEN为字符串string长度;其次,BX获取string的有效地址,将string存放的字符串赋值给AL,通过AL进行与’a’和’z’这个范围进行比较,若在该范围表示为小写字母,则需要转换为大写字母,即AL-20H(小写字母要比大写字母所对应的ASCII码值大20H),所以AL-20H就是小写字母所对应的大写字母。

代码如下:

DATA	SEGMENT
string	DB	"Hello World!"	;将需要转换的字符串存放到string中,定义类型为DB型
LEN EQU $-string			;等值伪指令EQU,将LEN表示string的长度
DATA	ENDS
CODE	SEGMENT
		ASSUME	CS:CODE,DS:DATA
START:	MOV	AX,DATA	;由于DATA为立即数,不能用赋值给段寄存器DS,需要借助AX通用寄存器
		MOV	DS,AX	;将AX赋值给DS
		MOV	BX,OFFSET string	;BX获取string的有效地址用于取出string中的字符串
		MOV	CL,LEN	;CL为string字符串的长度
NEXT:	MOV	AL,[BX]	;此时[BX]为string所存放字符串的内容,赋值给AL
		CMP	AL,'a'	;由于是DB字节类型,只需要将AL的一个字节单元与单个字符'a'进行比较
		JB	LOP		;JB为小于跳转,即AL存放的字节单元的内容所对应的ASCII码值小于'a'所对应的ASCII码值,跳转到LOP标签处 否则不跳转执行下一条指令
		CMP	AL,'z'	;若执行到此条指令,代表AL>='a',接下来需要与'z'进行比较即可
		JA	LOP		;JA为大于跳转,即AL存放的字节单元的内容所对应的ASCII码值大于'z'所对应的ASCII码值,跳转到LOP标签处 否则不跳转执行下一条指令  
		SUB	AL,20H	;执行到此条指令,表示以及确定此时的AL为小写字母,AL-20H表示将小写字母转换为所对应的大写字母(小写字母比对应的大写字母的ASCII码值大20H)
		MOV	[BX],AL	;将小写字母转换为对应的大写字母结束后,结果AL存放回原来的物理地址[BX]处
LOP:	INC	BX		;BX+1(因为DB字节类型),表示判断下一个字节单元存放的字符串
		DEC	CL		;CL-1,表示字符串string所需要判断字符的长度减一
		JNZ	NEXT	;若CL不为0,即字符串string仍有需要判断的字符,跳转到NEXT标签处
		MOV	AH,4CH	;调用4CH号功能,返回DOS操作系统指令
		INT	21H		;终止当前程序的运行,并返回DOS系统
CODE	ENDS
		END	START
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!