回 帖 发 新 帖 刷新版面

主题:救急--汇编语言

     1.一段字符串,统计其中数字的个数,如
      DATA SEGMENT
      DA   DB  'xsdfcvbn423ae1gf'
      DATA ENDS
      .......
      后面的程序怎么编写呢?
       可在MASM.EXE上运行的
         这是老师布置的上机考试题目,对于我一个初学者,老师也够残忍的,俺想想了很久也没想出来,就来请教各位大哥大姐帮帮小弟,小弟会感激不尽的,这个星期三(12.21)作业就要交上出了.[em23]

回复列表 (共1个回复)

沙发


;author: Dummy
;date:     2005-12-14 12:21:23
;Microsoft Macro Assembler Version 6.15.8803
;Turbo Link Version 3.01

;输入一字符串,要求显示其中数字的个数及显示这些数字.

.model small

.stack
.data
strBuff        db    100
            db    ?
            db    100    dup    (?)
strMsg1        db    0DH, 0AH, 'number: ', '$'
strMsg2        db    0DH, 0AH, 'total: ', '$'

.code
_main:
            mov        ax, @data
            mov        ds, ax
            
            lea        dx, strBuff
            mov        ah, 0AH
            int        21H

            lea        dx, strMsg1
            mov        ah, 9
            int        21H

            cld
            lea        si, [strBuff + 2]
            mov        cl, byte ptr [si - 1]    ;用户输入字符个数送入 cl
            inc        cl
            xor        bx, bx
    _next_char:
            dec        cl
            test    cl, cl
            jz        _@1
            lodsb
            cmp        al, '0'
            jb        _next_char
            cmp        al, '9'
            ja        _next_char
            inc        bx
            mov        dl, al
            mov        ah, 2
            int        21H
            jmp        _next_char
    _@1:
            lea        dx, strMsg2
            mov        ah, 9
            int        21H
            
            mov        ax, bx
            lea        si, strBuff
            call    BinToDecString

            lea        dx, strBuff
            mov        ah, 9
            int        21H

            mov        ax, 4C00H
            int        21H

;****************************************************
;BinToDecString
;功能:
;    机器数转换为十进制字符串
;入口参数:
;    AX 存放机器数
;    SI 存放要转换后的字符串的地址
;****************************************************
BinToDecString    proc
            push    dx
            push    cx

            mov        cx, 10
            mov        bp, sp
_@BinToDecString_1:
            xor        dx, dx
            div        cx        ;除以 10
            add        dl, '0'
            dec        bp
            mov        byte ptr [bp], dl

            test    ax, ax
            jnz        _@BinToDecString_1
            
_@BinToDecString_2:
            cmp        bp, sp
            je        _@BinToDecString_3
            mov        al, byte ptr [bp]
            mov        byte ptr [si], al
            inc        bp
            inc        si
            jmp        _@BinToDecString_2
_@BinToDecString_3:
            mov        byte ptr [si], '$'

            pop        cx
            pop        dx
            ret
BinToDecString    endp
end    _main

我来回复

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