小写转大写输出,并统计数字、大写字母、小写字母的个数

键盘输入数字、大写字母、小写字母的混合串(以回车结束,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
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值