百度知道中已有的程序,都不能处理字符"$",文章长度也不超过255个字符.
我的代码修正了此BUG,并考虑了无输入的情况.
CODE SEGMENT;经运行,符合要求.
ASSUME CS:CODE
org 100h
START:
push cs
pop ds
push cs
pop es
xor ax,ax;计数区清0
mov bx,ax
mov di,200h
mov si,di
mov cx,26
rep stosw
lea dx,str;提示
mov ah,9
int 21h
cld
mov di,280h;指向缓冲区首址
xor cx,cx;输入字符数计数器清0
input:
mov ah,0
int 16h;接收一字符
cmp al,0dh
jz done;是回车结束输入
mov ah,0eh
int 10h;显示一字符
cmp al,'A'
jb save
cmp al,'Z'
ja w1
mov bl,al
sub bl,41h
or al,20h;大写字母变成小写
jmp _Add
w1:cmp al,'a'
jb save
cmp al,'z'
ja save
mov bl,al
sub bl,61h
sub al,20h;小写字母变成大写
_Add:shl bx,1
inc word ptr [bx+si]
save:stosb
inc cx
cmp cx,8200;最多可输入字符数
jbe input
done:
mov ah,0eh
int 10h
mov al,0ah
int 10h
jcxz u1
mov si,280h
w2:lodsb
mov ah,0eh
int 10h;显示转换结果
loop w2
u1:
mov al,0dh
int 10h
mov al,0ah
int 10h
mov si,200h
mov cx,26
p2:
mov al,zimu;显示各字母个数
inc zimu
mov ah,0eh
int 10h
mov al,':'
int 10h
call show
inc si
inc si
mov ax,0e20h
int 10h
mov al,07
int 10h;发出一声提示音
loop p2
mov ah,0
int 16h
mov ah,4ch
INT 21H
org 1b0h
show:
push bx
push cx
push dx
mov ax,[si]
xor cx,cx
mov bx,10
t5:xor dx,dx
div bx
or dx,30h
push dx
inc cx
cmp ax,0
jnz t5
t6:pop ax
mov ah,0eh
int 10h
loop t6
pop dx
pop cx
pop bx
ret
str db 'Input your txt: ',0dh,0ah,'$'
zimu db 'A'
CODE ENDS
END START
通过ASCII码来实现
1、将字母转换成ASCII码。
2、大写字母的ASCII码加上32就成为对应小写字母的ASCII码;小写字母的ASCII码减去32就成为对应大写字母的ASCII码;
3、将ASCII码转换成字母。
通字字母出现次数:
统计每个字母的ASCII码就可以了。
相关知识:
大写字母:65~90
小写字母:97~122
ASCII码对照表:
http://zfw001.bokee.com/4476391.html
;我把每个字母出现的次数放在x中与每个字母对应的地方,你要显示就是自己
;加个简单的输出子程序就是了
CRLF MACRO
MOV DL,0DH
MOV AH,02H
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
ENDM
DATAS SEGMENT
W DB 'BBBBBBLLLLZZZZZ222$'
CHANG DW $-W
X DB 26 DUP(0)
Z DB 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
DATAS ENDS
STACKS SEGMENT
DB 100 DUP(?)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV DX,OFFSET W
MOV AH,09H
INT 21H
XOR SI,SI
MOV CX,CHANG
A: CMP W[SI],'A'
JB S
CMP W[SI],5BH
JNB B
MOV AL,W[SI]
SUB AL,'A'
AND AH,0
MOV DI,AX
ADD X[DI],1
ADD W[SI],32
JMP S
B: CMP W[SI],'a'
JB S
CMP W[SI],7BH
JNB S
MOV AL,W[SI]
SUB AL,'a'
AND AH,0
MOV DI,AX
ADD X[DI],1
SUB W[SI],32
S: INC SI
LOOP A
CRLF
MOV CX,26
XOR SI,SI
CHI:
MOV DL,Z[SI]
MOV AH,02H
INT 21H
MOV BX,CX
MOV CX,WORD PTR X[SI]
XIANG:MOV DL,07
INT 21H
LOOP XIANG
MOV CX,BX
CRLF
INC SI
LOOP CHI
MOV DX,OFFSET W
MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
CODES ENDS
END START
这个程序的功能真无聊啊…… 大写变小写……小写变大写……
代码上面的有人写了……我就不写了……
标记下,等下写写试试。