(汇编)大小写转换及统计个数

问题:键盘输入数字、大写字母、小写字母的混合串(以回车结束,100个以内),将其中的小写字母转换为大写字母后显示到CRT上,并统计其中其中数字、大写字母、小写字母的的个数。

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 ;如果不是小写字母跳转到next1
	jb 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  ;如果不是大写字母就跳转到next2
	jb next2
	cmp al, 5ah
	ja next2
	inc x2 ;大写字母个数加1
	jmp l
next2:
	inc x1 ;数字个数加1
l:
	inc bx
	dec cl
	jnz lop


	;输出统计个数
	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

 

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值