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