1 ;===================== 2 ;字符串中大写变小写 3 DATAS segment 4 String db 10, ?, 10 dup(?) ;最多接收10个字符,最后的回车算一个字符 5 DATAS ends 6 7 CODES segment 8 START: 9 mov AX,DATAS 10 mov DS,AX 11 ;正式代码部分 12 13 mov dx,offset String 14 mov ah,0ah ;10号功能调用设置 15 int 21h ;调用10号DOS中断,输入字符串 16 17 mov si,offset String+1 ;获取记录输入字符个数内容的偏移地址 18 xor cx,cx ;cx清零 loop循环的次数由cx设置 19 mov cl,[si] ;设置循环次数将: DS:si中的内容取出来放入cl中 20 lp: 21 inc si ;si自增1 22 mov al,[si] ;把si地址中存放的数据传给al 23 cmp al,'A' ;字符比较 24 jb next ;如果小于'A'则跳转到next: 25 cmp al,'Z' 26 ja next ;如果大于'Z'则跳转到next: 27 add al,20h ;在'A'~'Z'范围内,加20h变成小写 28 mov [si],al ;将内容重新存放进内存空间 29 next: 30 loop lp ;循环调用 31 mov byte ptr [si+1],'$' ;字符串最后加个'$'便于用9号功能输出避免输出许多无关内容 32 33 mov ah,2 34 mov dl,0ah 35 int 21h ;换行 36 mov dl,0dh 37 int 21h ;换行 38 ;为什么+2?因为录入字符串的时候string 指向的内存地址空间依次存放的 0ah,录入的 39 ;个数,录入的字符串 40 mov dx,offset String+2 41 mov ah,9 42 int 21h ;调用9号DOS中断,显示首地址为DS:DX的字符串 43 44 mov al,0 45 mov AH,4CH 46 INT 21H 47 CODES ends 48 end START