[汇编]键盘输入,小写转大写,并统计小写个数

DATAS SEGMENT
MESSAGE  DB ‘Please enter a string.’,13,10,’$’
CR    DB 13,10,’$’ ;回车换行
STRING4  DB  ‘LowAlpha: $’
ALPHAL   DB  0                     ;小写字母
STRING DB 100
DB 0
DB 80 DUP(0) ;定义缓冲区

DATAS ENDS

STACKS SEGMENT
DB 200 DUP(?)
STACKS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:
HEAD:
MOV AX,DATAS
MOV DS,AX
LEA DX,MESSAGE ;输出提示语
MOV AH,09H
INT 21H
LEA DX,STRING
MOV AH,0AH
INT 21H    ;把字符串输入到BUF区
LEA DX,CR
MOV AH,09H
INT 21H    ;以上为回车换行
LEA SI,STRING+2 ;把字符串首地址存入BX
MOV CL,STRING+1 ;把字符个数存CX
MOV CH,0

NEXT1:
MOV DL,[SI]
CMP DL,’a’
JB    NEXT2
CMP DL,’z’
JA    NEXT2   ;ASCII码小于a和大于z的跳过,其余的减32
SUB DL,20H   ;大小写字母的ASCII码差32
INC  ALPHAL        ;ALPHAL++

NEXT2:
MOV AH,02H
INT 21H
INC SI    ;BX自加,判断下一个字符
DEC CX    ;CX自减,最终将是0
JNE NEXT1   ;CX非零时,跳回NEXT1
MOV DX,OFFSET CR ;输出回车换行
MOV AH,09H
INT 21H

OVER2:

LEA  DX,STRING4
MOV  AH,9
INT  21H
XOR  AX,AX
MOV  AL,ALPHAL
CALL DISPLAY
MOV  AH,4CH
INT  21H

ENDLINE  PROC  NEAR  ;控制输出格式,输出回车换行子程序
MOV  AH,2
MOV  DL,0AH
INT  21H
MOV  AH,2
MOV  DL,0DH
INT  21H
RET
ENDLINE ENDP

DISPLAY PROC NEAR   ;输出两位数字的子程序
MOV BL,10      ;10送BL
DIV BL         ;AX/BL,AL=商,AH=余数
PUSH AX        ;保存AX中的信息
MOV DL,AL
ADD DL,30H
MOV AH,2
INT 21H         ;输出十位数
POP AX          ;出栈送AX
MOV DL,AH
ADD DL,30H
MOV AH,2
INT 21H         ;输出个位数
RET
DISPLAY ENDP

CODES ENDS
END START

 

原文:http://www.lyozhou.allcx.com/xiao-xie-zhuan-da-xue.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值