; 本程序通过编译,运行正确
Code Segment
Assume CS:Code,DS:Code
String db 'WELCOME'
N equ $-String
Start: push cs
pop ds ;使数据段与代码段同段
lea si,String ;取字符串地址
mov di,si
mov cx,N ;字符串长度(字符数)
cld
Upper_Down: lodsb ;读入一个字符至al寄存器
or al,20h ;大写变小写
stosb ;保存这个小写字母
mov dl,al
mov ah,2 ;屏幕显示这个字母
int 21h
loop Upper_Down
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Code ENDS
END Start ;编译到此结束
;本程序通过编译
data segment
string db 'ABCDEFGHIGKabcdefghigk','0'
count equ $-string-1
string1 db count dup(?),'$'
data ends
code segment
assume ds:data,cs:code
change proc
push bx
push cx
push dx
xor bx,bx
a0001: mov dl,string[bx]
cmp dl,'0'
je a0003
cmp dl,41h
jb a0002
cmp dl,5ah
ja a0002
add dl,20h
a0002: mov string1[bx],dl
inc bx
jmp a0001
a0003: pop dx
pop cx
pop bx
ret
change endp
start: mov ax,data
mov ds,ax
lea dx,string
mov ah,09h
int 21h
call change
mov ah,02h
mov dl,0ah
int 21h
mov dl,0dh
int 21h
lea dx,string1
mov ah,09h
int 21h
mov ah,4ch
int 21h
code ends
end start
从ascii值看‘a’比‘A‘大30h也就是48,所以’a‘的值减去48就变成了’A‘
大小写的区别,在于它们的D6位。