用汇编语言将大写字母变成小写字母

2024-12-29 00:33:01
推荐回答(4个)
回答1:

; 本程序通过编译,运行正确
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 ;编译到此结束

回答2:

;本程序通过编译
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

回答3:

从ascii值看‘a’比‘A‘大30h也就是48,所以’a‘的值减去48就变成了’A‘

回答4:

大小写的区别,在于它们的D6位。