欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

汇编语言

程序员文章站 2022-04-22 10:53:57
...

题目要求:
从键盘上输入一串字符到输入缓冲区,找出其中的大写字母和小写字母,并分别统计它们的个数,结果放到变量num1和num2中,要求在屏幕输出显示所有字母及变量num1和num2的值。

注意需要在屏幕输出所有字母,因此在判定字符是字母之后才可以输出,如果非字母,则不输出。

DATAS SEGMENT
   msg1 db 'please input string:$'
   buf DB  20				    ;预定义20字节的空间
       DB  ?				    ;待输入完成后,自动获得输入的字符个数
       DB  20  DUP(0) 
CRLF   DB  0AH, 0DH,'$'
   var dw 01h
   num01 db 'The num of Capital is:'
   num1 db 30h,'$';保存大写字母的个数
   num02 db 'The num of lowercase is:'
   num2 db 30h,'$';保存小写字母的个数
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    lea dx,msg1
    mov ah,09h
    int 21h;提示输入
    
    LEA dx,buf ;接收字符串
    mov ah,0ah;等待按键
    int 21h
   	LEA DX, CRLF                         ;另取一行                  
    MOV AH, 09H							 
    INT 21H
  	mov al,buf+1
    mov ah,0
    mov cx,ax;循环变量=输入字符数
    
	xor si,si
	add si,02h
 again:  
	mov al,buf[si]
 	cmp al,'A'
 	jb next;比A小直接结束本次循环
 	cmp al,'Z'
 	ja done1;比Z大判断是否是小写字母
 	;属于A~Z
 	add num1,1
 	;打印出来
 	mov dl,al
 	mov ah,02h
 	int 21h
 	jmp next
 done1:cmp al,'a'
 	jb next
 	cmp al,'z'
 	ja next
 	add num2,1
 	;打印出来
 	mov dl,al
 	mov ah,02h
 	int 21h
 next: add si,1
 	loop again
 	LEA DX, CRLF                         ;另取一行                  
    MOV AH, 09H							 
    INT 21H
 	LEA dx,num01
 	mov ah,09h
 	int 21h
 	lea dx,crlf
 	mov ah,09h
 	int 21h
 	lea dx,num02
 	mov ah,09h
 	int 21h
    MOV AH,4CH
    INT 21H
CODES ENDS
END START

运行结果:
汇编语言