分类统计并且反序显示

发布网友 发布时间:2022-04-20 09:51

我来回答

2个回答

热心网友 时间:2023-08-26 16:08

;输入一串字符,统计字母,数字,空格和其他各多少,字符串反序显示.
data segment
Tips db 'Please Input a String: ',0dh,0ah,'$'
IN_STR DB 100,?,100 DUP (?)
MSG1 db 0dh,0ah,' LETTER='
LETTER dw 0 ;字母计数器
MSG2 db ' DIGIT='
DIGIT dw 0 ;数字计数器
MSG3 db ' SPACE='
SPACE dw 0 ;空格计数器
MSG4 db ' OTHER='
OTHER dw 0 ;其它计数器
R4 db 0dh,0ah,'$' ;串结束标记
data ends

code segment
assume cs:code,ds:data

start:
mov ax,data
mov ds,ax
lea dx,Tips;提示
mov ah,9
int 21h
lea dx,IN_STR;输入源串
mov ah,0ah
int 21h
cld
lea si,IN_STR ;指向输入串
add si,2
T0:cmp byte ptr [si],0dh ;从串中找回车结束标记
jz show
_lop:lodsb ;取一字节
cmp al,20h
jnz y1
inc SPACE;;空格计数器+1
jmp next
y1:cmp al,'0'
jb Q1
cmp al,'9'
ja Q1
inc DIGIT ;数字+1
jmp next
Q1:cmp al,'A'
jb Q2
cmp al,'Z'
ja Q2
inc LETTER ;字母+1
jmp next
Q2:cmp al,'a'
jb Q3
cmp al,'z'
ja Q3
inc LETTER ;字母+1
jmp next
Q3:inc OTHER ;其他字符+1
next:jmp T0
show:
mov ax,LETTER
aam ;二化十
xchg ah,al ;调序
or ax,3030h ;转换成待显示的ASCII码
mov LETTER,ax ;送入内存

mov ax,DIGIT
aam
xchg ah,al
or ax,3030h ;同上
mov DIGIT,ax

mov ax,SPACE
aam
xchg ah,al
or ax,3030h ;同上
mov SPACE,ax

mov ax,OTHER
aam
xchg ah,al
or ax,3030h ;同上
mov OTHER,ax

lea dx,MSG1 ;=mov dx,offset MSG1
mov ah,9 ;显示统计计数结果
int 21h
;
lea si,IN_STR ;指向输入串
mov cl,IN_STR+1
mov ch,0
add si,cx
jcxz exit
add si,2
inc cx
std ;将此字符串反序显示输出
fx:lodsb
mov ah,0eh
int 10h
loop fx
exit:
mov ah,0 ;暂停
int 16h
mov ah,4ch
int 21h

code ends
end start

热心网友 时间:2023-08-26 16:08

呵呵

参考资料:如果您的回答是从其他地方引用,请表明出处

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com