1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| ;原理:因为小写字母比大写字母的ASCII值大32,32是2的5次方,即00100000b, ;那么我们就可以将小写字母和11011111b进行and操作,实现小写字母转换成大写。 assume cd:codesg,ds:datasg
datasg segment db 'ibm ' db 'dec ' db 'dos ' db 'vax ' dw 0 ;定义一个字,用来暂存cx datasg ends
codesg segment start: mov ax,datasg mov ds,ax mov bx,0 mov cx,4 s0: mov ds:[40h],cx ;将外层循环的cx值保存在datasg:40h单元中 mov si,0 mov cx,3 ;cx设置为内层循环的次数 s: mov al,[bx+si] and al,11011111b mov [bx+si],al inc si loop s add bx,16 mov cx,ds:[40h] ;用datasg:40h单元中的值恢复cx loop s0 mov ax,4c00h int 21h
codesg ends end start
|