回 帖 发 新 帖 刷新版面

主题:求助一道汇编程序题目![统计数字个数的]

连续输入一组字符,统计数字的个数
由于初学汇编,连个程序什么样,都理不清,谢谢!

回复列表 (共11个回复)

沙发

那位朋友帮帮忙啊

板凳

还包括统计字母和其他字符的
data segment
     letter db 0
     digit db  0
     other db 0
data ends
code segment
main proc far
     assume cs:code ,ds:data
start:mov letter,0
      mov digit,0
      mov other,0
input:mov ah,01h
      int 21h
      cmp al,0dh
      jz exit
      cmp al,'A'
      JB num
      CMP AL,'Z'
      ja word
      inc letter
      jmp input
num:   cmp al,'0'
      jb oth
      cmp al,'9'
      ja oth
      inc digit
      jmp input
word: cmp al,'a'
      jb oth
      cmp al,'z'
      ja oth
      inc letter
      jmp input
oth:inc other
    jmp input
exit: mov ah,4ch
     int 21h
     main endp
     code ends
     end start

      

3 楼

有些地方不太理想. 如果是一个多位数呢? 所以还应该有相关的switch .

4 楼

怎么输入呀???

5 楼

自己编写!参考!
STACKSG SEGMENT STACK
        DW 64 DUP(?)
STACKSG ENDS
DATA    SEGMENT
BUF     DB 60
        DB ?
        DB 60 DUP(?)
PRINT   DB 'only word,number,null can be input:',0DH,0AH,'$'
PRINTK  DB 'the null number is:',0DH,0AH,'$' ;空格的个数
PRINTS  DB 'the sz number is:',0DH,0AH,'$'   ;数字的个数
PRINTZ  DB 'the zm number is: ',0DH,0AH,'$' ;  字母和符号的个数
K       DB 0, 0DH,0AH,'$'
S       DB 0, 0DH,0AH,'$'
Z       DB 0, 0DH,0AH,'$'
COUNT   DB ?
DATA    ENDS
CODE    SEGMENT
        ASSUME CS:CODE,DS:DATA
START:
        MOV AX,DATA
        MOV DS,AX
        MOV AH,09H   ;显示提示信息
        LEA DX,PRINT
        INT 21H
        MOV AH,0AH    ;输入字符
        LEA DX,BUF
        INT 21H
        MOV CL,BUF+1 ;把字符个数送给cl
        XOR CH,CH
        CLD
        LEA SI,BUF+2
BEGIN:  LODSB         ;字符下移
        CMP AL,20H        
        JNE SZ        ;不等跳到数字
        INC K         ; 空格加一
L:      LOOP BEGIN
        JMP EXIT
SZ:     CMP AL,30H  ;数字部分
        JB  ERROR
        CMP AL,39H
        JA  ZM       ;大于跳到字母和符号
        INC S       ;数字加一
        JMP L        
ZM:     CMP AL,41H    ;字母部分
        JB ERROR
        CMP AL,5AH
        JA  ZM2       
        INC Z    ;字母和符号加一
        JMP L
ZM2:    CMP AL,61H
        JB ERROR
        CMP AL,7AH
        JA ERROR
        INC Z
        JMP L
ERROR:  MOV AH,14    ;其他处理
        MOV AL,7
        MOV BH,0
        INT 10H
        JMP L
EXIT:   ADD K,30H
        ADD S,30H
        ADD Z,30H
        MOV AH,9
        LEA DX,PRINTK
        INT 21H
        MOV AH,2
        MOV DL,K
        INT 21H
        MOV AH,0EH
        MOV AL,0DH
        INT 10H
        MOV AH,0EH
        MOV AL,0AH
        INT 10H
        MOV AH,9
        LEA DX,PRINTS
        INT 21H
        MOV AH,2
        MOV DL,S
        INT 21H
        MOV AH,0EH
        MOV AL,0DH
        INT 10H
        MOV AH,0EH
        MOV AL,0AH
        INT 10H
        MOV AH,9
        LEA DX,PRINTZ
        INT 21H
        MOV AH,2
        MOV DL,Z
        INT 21H
        MOV AH,4CH
        INT 21H
CODE    ENDS
        END START

6 楼

统计不能超过9!

7 楼

可以不可以只写 统计数字的个数呢??
      字符串不用从键盘输入的,直接存在数据段里,可以吗??
     谢谢了!!!!!!!!

8 楼

This is very easy.
data segment
    digit   db 0
data ends
code segment
    assume cs:code,ds:data
start:
    mov ax,data
    mov ds,ax
nInput:
    mov ah,1
    int 21h
    cmp al,0dh        
    jz  exit            ; if you input enter then quit
    cmp al,30h
    jb  next            ; input < 0
    cmp al,39h        
    ja next            ; input > 9
    inc digit            ; digit++
next:
    jmp nInput
exit:                ; quit program if you input enter
    mov    ah,4ch
    int    21h

code ends
end start

9 楼

求助!JA 是什么条件转移啊,我这看的不太懂。

10 楼

求助:从键盘输入一系$结束符的字符串,然后对其中的非数字字符计数,并显示结果.

我来回复

您尚未登录,请登录后再回复。点此登录或注册