用汇编语言编写:

输入一个字符串,扫描该字符串,按数字、字母和特殊字符3类,把字符分类输出到屏幕,并计算其中数字字符的和,把求得的和以十进制数的形式输出到屏幕。
locals @@
.model small
.stack 100h
.data
max_len db 80
str_len db ?
str_buf db 80 dup(?)
;
digit db 80 dup(?)
alpha db 80 dup(?)
other db 80 dup(?)
sum dw 0
.code
crlf proc near
push ax
push dx
mov ah, 2
mov dl, 0dh
int 21h
mov dl, 0ah
int 21h
pop dx
pop ax
ret
crlf endp
;
print proc
push bx
push dX
mov bx, 10
xor dx, dx
or ax, ax
JZ @@0
div bx
call print
add dl, '0'
push ax
mov ah, 2
int 21h
pop ax
@@0:
pop dx
pop bx
ret
print endp
;
;
printstr proc near
jcxz @@1
push ax
push cx
push dx
push si
@@0:
lodsb
mov ah, 2
mov dl, al
int 21h
loop @@0
call crlf
pop si
pop dx
pop cx
pop ax
@@1:
ret
printstr endp
main proc
mov ax, @data
mov ds, ax
lea si, max_len
mov dx, si
mov ah, 0ah
int 21h
lea bx, alpha
lea di, digit
lea bp, other
mov cl, byte ptr [str_len]
xor ch, ch
lea si, str_buf
cld
@@0: lodsb
cmp al, '0'
jb @@1
cmp al, '9'
ja @@1
mov byte ptr [di], al
inc di
sub al, '0'
xor ah, ah
add word ptr [sum], ax
jmp short @@5
@@1:
cmp al, 'A'
jb @@2
cmp al, 'Z'
ja @@2
jmp short @@3
@@2:
cmp al, 'a'
jb @@4
cmp al, 'z'
ja @@4
@@3:
mov byte ptr [bx], al
inc bx
jmp short @@5
@@4:
mov byte ptr ds:[bp], al
inc bp
@@5:
loop @@0
call crlf
lea si, alpha
mov cx, bx
sub cx, si
call printstr
lea si, other
mov cx, bp
sub cx, si
call printstr
lea si, digit
mov cx, di
sub cx, si
call printstr
mov ax, word ptr [sum]
call print
mov ax, 4c00h
int 21h
main endp
end main