编写一个汇编语言程序,将字符串"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 SEGMENTASSUME CS:CODE,DS:DATA
START: MOV AX,DATA ;由于DATA为立即数,不能用赋值给段寄存器DS,需要借助AX通用寄存器MOV DS,AX ;将AX赋值给DSMOV BX,OFFSET string ;BX获取string的有效地址用于取出string中的字符串MOV CL,LEN ;CL为string字符串的长度
NEXT: MOV AL,[BX] ;此时[BX]为string所存放字符串的内容,赋值给ALCMP 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 ENDSEND START