键盘输入数字、大写字母、小写字母的混合串(以回车结束,100个以内),
将其中的小写字母转换为大写字母后显示到CRT上
data segment
mess db "please input", 0dh,0ah,'$'
buf db 101
db ?
db 101 dup (0)
data ends
code segment
assume cs:code,ds:data,es:data
start:
mov ax, data
mov ds, ax
mov dx, offset mess
mov ah, 9
int 21h
mov dx, offset buf
mov ah, 10
int 21h
mov dl,0ah
mov ah,2
int 21h
mov dl,0dh
mov ah,2
int 21h
mov bx, offset buf+2
mov cl, buf+1
s:
cmp cl, 0
jz print
dec cl
mov al, [bx]
cmp al, 30h
jb ok
cmp al, 3Ah
jb num
cmp al, 41h
jb ok
cmp al, 5Bh
jb cap
cmp al, 61h
jb ok
cmp al, 7Bh
jb low_
ok:
inc bx
jmp s
num:
jmp ok
cap:
jmp ok
low_:
sub byte ptr [bx], 20h
jmp ok
print:
mov byte ptr [bx], '$'
mov dx, offset buf+2
mov ah, 9
int 21h
mov ah, 4ch
int 21h
code ends
end start
扩展:并统计其中其中数字、大写字母、小写字母的的个数,显示出来
data segment
mess db "pelease input a string: ", 0dh, 0ah, '$'
Num db 0dh, 0ah,"THE NNMBER OF NUM IS :$"
Cap db 0dh, 0ah,"THE NNMBER OF CAP IS :$"
Lower db 0dh, 0ah,"THE NNMBER OF LOWER IS :$"
x1 db 0 ;统计数字个数
x2 db 0 ;统计大写祖母个数
x3 db 0 ;统计小写字母个数
buf db 100
db ?
db 100 dup(0)
data ends
code segment
assume cs:code, ds:data, es:data
start:
mov ax, data
mov ds, ax
mov dx, offset mess
mov ah, 9
int 21h
mov dx, offset buf
mov ah, 10
int 21h
mov dl,0ah
mov ah,2
int 21h
mov dl,0dh
mov ah,2
int 21h
mov bx, offset buf+2
mov cl,buf+1
lop:
mov al, [bx]
cmp al, 61h
jb next1
;如果不是小写字母跳转到next1
cmp al, 7ah
ja next1
sub al, 20h ;小写字母Ascii码减20得到大写字母
mov dl, al
mov ah,2 ;调用2功能输出
int 21h
inc x3 ;小写字母个数加1
jmp l
next1:
cmp al, 41h ;41h-A
jb next2 ;al < 41h
;如果不是大写字母就跳转到next2
cmp al, 5ah ;5ah-Z
ja next2 ;al > 5ah
inc x2 ;大写字母个数加1
jmp l
next2:
inc x1 ;数字个数加1
l:
inc bx
dec cl
jnz lop
;不等于0继续
mov dx, offset Num
mov ah, 9
int 21h
;输出统计个数
mov al,x1
call B_TO_D16 ;调用子程序输出数字串
mov dx, offset Cap
mov ah, 9
int 21h
mov al,x2
call B_TO_D16 ;调用子程序输出大写字母串
mov dx, offset Lower
mov ah, 9
int 21h
mov al,x3
call B_TO_D16
jmp exit
;16位二进制转十进制子程序
B_TO_D16 PROC NEAR;AL中要转换的二进制数
AND AH,0 ;ah存放余数,初始化为0
MOV BL,100
DIV BL ;ax/100得到百位数,存放al中
MOV CL,AH ;余数暂存于cl中
ADD AL,30H ;输出百位数
MOV DL,AL
MOV AH,02H
INT 21H
MOV AL,CL
MOV BL,10
AND AH,0
DIV BL ;ax/10得到十位数
ADD AL,30H ;输出十位数
MOV DL,AL
MOV CL,AH
MOV AH,02H
INT 21H
MOV AL,CL ;输出个位数
ADD AL,30H
MOV DL,AL
MOV AH,02H
INT 21H
RET
B_TO_D16 ENDP
exit:
mov ah, 4ch
int 21h
code ends
end start