发布网友 发布时间: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
呵呵
参考资料:如果您的回答是从其他地方引用,请表明出处