大小写转换

 1 ;小写字母的ASCII码比大写字母的ASCII码的值大20H。
 2 ;比如大写字母A的ASCII值为01000001 小写字母a的ASCII码为:01100001
 3 ;公式为 a(01100001) - 20H(100000) = A(01000001)
 4 ;A(01000001) + 20H(100000) = a(01100001)
 5 assume cs:codesg,ds:datasg
 6 
 7 datasg segment
 8 
 9     db 'Basic' ;定义字符
10     db 'iNfOrMaTiOn'
11     
12 datasg ends
13 
14 codesg segment
15 
16 start: mov ax,datasg ;将定义的字符以16进制方式传入AX通用寄存器
17        mov ds,ax    ;然后指向数据段地址
18        
19        mov bx,0 ;将偏移地址设置为0,这样就获取到了ds:[0] = 'B'
20        
21        mov cx,5 ;CX设置为5次,循环得到Basic字符
22     s: mov al,[bx]  ;将DS:[bx]内存数据送到AL低八位寄存器中
23        and al,11011111B ;将AL中的数据进行按位与运算,变为大写字母
24        mov [bx],al ;将转换后的ASCII返回到原单元
25        inc bx ;bx加1,加5次,依次指向BASIC内存地址
26        loop s  ;继续循环
27        
28        mov bx,5 ;将BX偏移地址设置为5,指向BASIC后
29        mov cx,11 ;循环11次
30        
31     s0: mov al,[bx] ;,获取iNfOrMaTiOn
32         or al,00100000B ;将ASCII码的第五位设置为1,变成小写
33         mov [bx],al ;将转换后的ASCII码写回原单元
34         inc bx ;依次加1
35         loop s0 ;继续循环
36     mov ax,4c00h
37     int 21H
38 codesg ends
39 end start
原文地址:https://www.cnblogs.com/killbit/p/4809119.html