用汇编语言设计程序:从键盘输入若干字符(输入回车结束),统计其中字符、数字、其他类的个数

2024-10-31 06:18:48
推荐回答(3个)
回答(1):

本程序最多能输入255个字符包括回车,输出统计时,第一个数字是数字字符个数,第二个是字母,第三个是其它。
assume cs:code,ds:data
data segment
da1 db 255
da2 db ?
da3 db 255 dup (?)
data ends
stack segment stack
db 256 dup (?)
stack ends
code segment
start:
mov ax,data
mov ds,ax

lea dx,da1 ;输入字符串
mov ah,10
int 21h

lea bx,da3 ;统计字符串
xor cx,cx
xor ax,ax
xor dx,dx
mov cl,da2
again:
mov ah,[bx]
.if ah >= '0' && ah <= '9' ;数字,al加1
inc al
.elseif ah >= 'A' && ah <= 'Z' ;字母,dh加1
inc dh
.elseif ah >= 'a' && ah <= 'z'
inc dh
.else
inc dl ;其它,dl加1
.endif
inc bx
loop again

call putout ;输出数字个数
mov al,dh
call putout ;输出字母个数
mov al,dl
call putout ;输出其它字符个数
mov ax,4c00h
int 21h

putout: ;以16进制形式输出al中的数据
push bx
push dx
xor ah,ah
push ax

mov dl,13 ;换行
mov ah,2
int 21h
mov dl,10
mov ah,2
int 21h

pop ax
mov bl,16
div bl ;使高位与低位分离
.if al>9 ;转换成字符
add al,40h
.endif
add al,30h

.if ah>9
add ah,40h
.endif
add ah,30h

mov bl,ah ;保存低位

mov dl,al ;输出高位
mov ah,2
int 21h
mov dl,bl ;输出低位
mov ah,2
int 21h

pop dx
pop bx
ret

code ends
end start

回答(2):

DATA SEGMENT
BUFF DB 64,?,64 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE ,DS:DATA
MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET BUFF
MOV AX,0AH
INT 21H
MOV SI,OFFSET BUFF
INC SI
INC SI
MOV CX,BUFF+1
CMP0:CMP [SI],9
JA CHARACT0
INC BH;数字计数器
JMP THEND
CHARACT0:CMP [SI],'a'
JA CHARACT1
CMP [SI],'A'
JL OTHER0
CMP [SI],'Z'
JA OTHER0
INC BL;字母计数器
JMP THEND
CHARACT1:CMP [SI],'z'
JA OTHER0
INC BL
JMP THEND
OTHER0:INC DH;其他的计数器
THEND:INC SI
LOOP CAMP0
MIOV DL,BH;将数字、字符、其它的个数依次显示出来
MOV AH,02H
INT 21H
MOV DL,BL
MOV AH,02H
INT 21H
MOV DL,DH
MOV AH,02H
INT 21H
MOV AH,4CH
INT 21H;结束
CODE ENDS

回答(3):

呵呵,#include
void main()
{ int nE=0;
char a[1000],b;
scanf("%s",a);
while (a[i]!='\n')
{
scanf("%c",b);

if (a[i]==b)
nE++;
}
printf("%d,nE);
}