问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

...从键盘输入一段字符,以#结束,统计其中数字,字母,以及空格的个数...

发布网友 发布时间:2024-10-19 16:18

我来回答

2个回答

热心网友 时间:2天前

为了简便,直接使用了21中断的输入字符串子功能,即使你不输入#作为结束符,也可以使用。
统计时,则将'#'后面的字符忽略
正确的作法,是调用21中断的1号子功能,每次读取一个字符,直到读取到'#'为止。
这个修改很简单,我就不再写了。

data segment
  buf db 255 ;
        db ?
            db 255 dup('$')
    c1 dw 0 ;spacebar
    c2 dw 0 ;digital number
    c3 dw 0 ;alphabet
    m1 db 0dh, 0ah, "Spacebar number:$"
    m2 db 0dh, 0ah, "Digital number:$"
    m3 db 0dh, 0ah, "Alphabet number:$"
data ends

code segment
        assume cs:code, ds:data
start:
        mov ax, data
        mov ds, ax
        mov es, ax

;code start here
; read string
        lea dx, buf
        mov ah,0ah
        int 21h

;
    xor cx, cx
        mov cl, buf+1
        mov si, 0
Loop1:
        mov al, buf[si+2]
        cmp al, '#'
        jz  lopend
        cmp al, 20h
        jz space
        cmp al, '0'
        jb alphabet
        cmp al, '9'
        ja alphabet
        inc c2      ;digital number
        jmp lop
space:
        inc c1      ;spacebar
        jmp lop
alphabet:
        inc c3
lop:
        inc si
        loop loop1

lopend:

; print result
        lea dx, m1
        mov ah, 9
        int 21h

        mov ax, c1
        call print

        lea dx, m2
        mov ah, 9
        int 21h

        mov ax, c2
        call print

        lea dx, m3
        mov ah,9
        int 21h

        mov ax, c3
        call print

;exit to OS
        mov ah,4ch
        int 21h

print proc near
        mov bx, 10
        xor cx, cx
Q0:
        xor dx, dx
        div bx
        or dx, 0e30h
        push dx
        inc cx
        cmp ax, 0
        jnz Q0
Q1:
        pop ax
        int 10h
        loop Q1
        ret
print endp

code ends

end start

热心网友 时间:2天前

stack segment stack
byte 256 dup(0)
stack ends

data segment
C1 dw 0 ;空格数
C2 dw 0 ;数字数
C3 dw 0 ;字母数
C4 dw 0 ;其它字符数
BUFF db 64, 0, 64 dup(?) ;接收输入缓冲区,BUFF[0]存储缓冲区大小,BUFF[1]存储实际输入数,BUFF[2]开始为输入的数据
SHEX DB '0123456789ABCDEF$'
MSG1 db 13,10,'space: $'
MSG2 db 13,10,'number: $'
MSG3 db 13,10,'alpha: $'
MSG4 db 13,10,'other: $'
MSG5 db 'input your data, end to input #', 13, 10, '$'
data ends

code segment
assume cs:code,ss:stack,ds:data
START:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax

call GetInputData;

call CountInputData;

;输出空格数
mov dx, offset MSG1
mov ax, C1
call PrintLen

;输出数字数
mov dx, offset MSG2
mov ax, C2
call PrintLen

;输出字母数
mov dx, offset MSG3
mov ax, C3
call PrintLen

;输出其他数
mov dx, offset MSG4
mov ax, C4
call PrintLen
PROCEXIT:
; 程序退出
mov ax,4c00h
int 21h

;打印出长度,长度保存在AX里, DX里存储提示信息地址
PrintLen proc near
push ax
mov ah,9h
int 21h
pop ax

mov cx,4
PRINTLOOP:
rol ax,1
rol ax,1
rol ax,1
rol ax,1
push ax
mov dl,al
and dl,0FH
mov bx, offset SHEX
add bl,dl
mov dl, byte ptr [bx]
mov ah,2
int 21h
pop ax
loop PRINTLOOP
ret
PrintLen endp

CountInputData proc near
mov ch,0
mov cl, byte ptr[BUFF+1]
mov si, offset BUFF+2
MYLOOP:
mov al, [si]
inc si

cmp al,20h ;' '空格
je CCOUNT1
cmp al, '0' ;'0'
jl CCOUNT4
cmp al, '9' ;'9'
jle CCOUNT2
cmp al, 'A' ;'A'
jl CCOUNT4
cmp al, 'Z' ;'Z'
jle CCOUNT3
cmp al, 'a' ;'a'
jl CCOUNT4
cmp al, 'z' ;'z'
jle CCOUNT3
CCOUNT4:
inc C4
jmp NEXTLOOP
; 空格
CCOUNT1:
inc C1
jmp NEXTLOOP
; 数字
CCOUNT2:
inc C2
jmp NEXTLOOP
; 字母
CCOUNT3:
inc C3
jmp NEXTLOOP
NEXTLOOP:
loop MYLOOP
ret
CountInputData endp

;获取输出数据,输入数据保存在BUFF里,个数
GetInputData proc near
mov dx, offset MSG5
mov ah, 9h
int 21h

mov ch,0
mov cl,BUFF
lea bx,BUFF+2;
INPUTLOOP:
mov ah,1
int 21h
cmp al, '#'
jz EXITINPUT
cmp al, 13 ;跳过回车符
jz INPUTLOOP
cmp al, 10 ;跳过换行符
jz INPUTLOOP
inc byte ptr[BUFF+1]
mov byte ptr[bx], al
inc bx
loop INPUTLOOP
EXITINPUT:
ret
GetInputData endp

code ends

end START
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
梦见和同性发生关糸了 梦见和同性朋友发生亲密关系 学生党如何科学护肤? 学生党该怎么基础护肤? 有什么美容护肤的技巧适合学生党? 怎么@全部成员啊? 新洲摩尔城一楼小吃租金多少 武汉王家湾有哪些广场 你好 请问 晚上6点开始 学瑜伽 可以吗? 因为我想在下班时间去 锻炼锻 ... 电脑联网有哪些条件台式电脑无线上网需要具备哪些条件 “南去愁霖北去乾”的出处是哪里 ...予以悼亡日近不去因寄李商隐原文赏析在线翻译解释 愁霖[chóu lín]什么意思?近义词和反义词是什么?英文翻译是什么... 60缸,小鱼+草该用什么过滤和LED灯 大姐天天逛花园,二哥弹琴夜黑天,三姐织网到天明,四妹做饭香又甜... 大姐天天逛花园二哥弹琴夜黑天,三姐织网到天明,四姐做饭香又香打四种... 大姐天天花园转,二姐唱歌夜黑天,三姐织布到天明,四姐做饭甜又甜_百度知... 大姐天天逛花圆,二哥弹琴夜黑天,三姐织布到天明,四妹做饭甜又香,猜十二... 大姐天天逛花园,二哥弹琴夜黑天。三姐织布到天明,四妹做饭香又甜。打... 大姐天天逛花园,二哥弹琴夜黑天,三姐织布到天明,四妹做饭香又甜(打四种... 红布包放什么辟邪 红布里放什么辟邪 ...漫天风雪里,看着你远去,我竟悲伤的不能自已》请问什么歌?_百度... ...一声宝贝儿,试问哪个少女,可以抵挡朱亚文那句“宝贝儿”?_百度... ...男的不想她去去了让她睡沙发她睡床了还说你把我赶出去? 黑豆煮多久才熟了 黑豆一般需要煮几分钟呢 为赌场站岗放哨是否构成开设赌场罪麻烦告诉我 为赌场放哨构成什么罪 ...养老保险可靠吗?如果保险公司倒闭了,有什么保障? 我在xp电脑上安装了HP Deskjet 1000 J110 series 当时打印机能打印... 鸡蛋大小的紫色石头,椭圆形,外表光滑,石质坚硬,用手电筒照着整个石头是... 全国县市区多少个 给要上大学的女朋友送生日礼物,给点建议…… 大学交女朋友谈恋爱送什么礼物好 人类是否有能力移民到别的星球上 洗衣机 如何洗衣服 云之家如果不签到不登陆能跟踪定位嘛 如何给被子四个角 如何固定棉花被和被套 非辖区小学毕业是什么意思 请问孩子户口在该辖区就可以在该辖区所在片区就读吗? 限辖区儿童是什么意思? applewatchs7怎么还原 社保问题,交了一年社保卡余额为零 我现在大学英语四级515分的水平,刚参加工作,想运用闲暇时间把英语上个... 到底是读四级还是中级口译?回答的好,加满分数! 公司强制加班应该如何取证 广州限购如何买房 广州买房限购政策 小米3ota升级到最新开发版,进程序的时候怎么会卡,变黑屏了呢?_百度知 ...