| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3813 人关注过本帖
标题:小白,请教汇编,从键盘输入一系列以$为结束符的字符串,然后对其中的非数字 ...
只看楼主 加入收藏
阿凡的夏天
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2020-4-9
结帖率:100%
收藏
已结贴  问题点数:15 回复次数:1 
小白,请教汇编,从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示出计数结果。
程序段如下:
DSEG SEGMENT
   BUFF DB 50 DUP('')
   COUNT DW  0
DSEG ENDS

     BEGIN: LEA BX, BUFF
     MOV COUNT, 0
    INPUT: MOV AH, 01        ;从键盘输入一个字符的功能调用
    INT 21H
    MOV [BX], AL
    INC BX
    CMP AL, ‘$’     ;是$结束符吗?
    JNZ INPUT           ;不是,继续输入
    LEA BX, BUFF       ;对非数字字符进行计数
     NEXT: MOV CL, [BX]
    INC BX
    CMP CL, ‘$’     ;是$结束符,则转去显示
    JZ DISP
    CMP CL, 30H       ;小于0是非数字字符
    JB NEXT
    CMP CL, 39H       ;大于9是非数字字符
    JA NEXT
    INC COUNT         ;个数+1
    JMP NEXT
       DISP: ┇ ;16进制数显示程序段(省略)

此题省略了16进制数显示程序段,此段代码,不懂怎么编写
搜索更多相关主题的帖子: 结束 数字 字符 计数 显示 
2020-05-04 22:11
Valenciax
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:11
帖 子:340
专家分:2482
注 册:2016-5-15
收藏
得分:15 
简单题目简单的写,输出方式可以参考Output_ax子程序
程序代码:
DATA SEGMENT
        OutStr db 0dh,0ah            ;回车
        Output db '0',4 dup (20h),0dh,0ah,'$'    ;输出字串含回车
DATA ENDS

CODES SEGMENT
         ASSUME CS:CODES,DS:DATA
START:        MOV     AX,DATA
        MOV     DS,AX
        MOV     ES,AX
        mov     bx,0        ;初始化计数
next:        mov    ah,1        ;输入,显示字符
        int    21h
        cmp     al,'$'        ;比较结束符
        jz    Count        ;输入$跳
        cmp     al,0dh        ;是否enter,也视作结束输入
        jz     Count
        cmp     al,'0'        ;比较'0'
        jb    @f        ;不是数字符跳
        cmp     al,'9'        ;比较'9'
        jbe    next        ;输入数字符,不计,重新输入
@@:        inc     bx        ;累加计数
        jmp     short next    ;重新输入
Count:        mov    ax,bx        ;取值
        lea     di,OutPut    ;指向结果字串    
        call    Output_AX    ;调用程序将ax转为ASCII字串
        lea    dx,OutStr    ;指向输出字串
        mov     ah,9        ;输出
        int    21h

        MOV     AH,4CH
        INT     21H
;----------------------------------------------------------------------------
;将ax值转为ascii数字,存入es:di
Output_AX:    mov     cx,0         ;清0
                mov     bx,10         ;除法准备
@@:        mov     dx,0         ;清0
                div     bx         ;ds:ax /10 ,若1234 ,除10后,dl得余数4,
                push    dx         ;保存, ax=1234,依次保存4,3,2,1
                inc     cx         ;累加个数
                or      ax,ax         ;是否已除尽
                jnz     @b         ;不是,再除
                mov     bl,cl         ;存个数
@@:        pop     ax          ;后入先出,先印出第一数,然后第二....
                or      al,30h         ;转ascii
                stosb               ;存入字串缓冲
                loop     @b         ;回圈,下一个
                ret
;----------------------------------------------------------------------------
CODES ENDS
END START






2020-05-05 06:28
快速回复:小白,请教汇编,从键盘输入一系列以$为结束符的字符串,然后对其中的 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021478 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved