判断输入的字符串中数字,大写字符,小写,其他字符,英文字符的个数

落尘季节 2012-04-16 05:31:31
代码:

datarea segment
errstr db 'length is too long!',13,10,'$'
datarea ends
prognam segment
main proc far
assume cs: prognam,ds:datarea,es:datarea
start:
push ds
sub ax,ax
push ax
mov ax,datarea
mov ds,ax
mov ax,datarea
mov es,ax
;+++++++++++++++++++++++++++++++++++++

mov ax,0
mov bx,0
mov cx,0
mov di,0
AGAIN:
mov ax,bx
add ax,cx
add ax,dx
add ax,di
cmp ax,1eh
ja ERR

mov al,01h
int 21h
cmp al,'$'
je EXIT
cmp al,'0'
jb L1

cmp al,'9'
jbe L2
cmp al,'A'
jb L1
cmp al,'Z'
jbe L3
cmp al,'a'
jb L1
cmp al,'z'
jbe L4

add bx,1
jmp AGAIN

ERR:
mov dx,offset errstr
mov ah,9h
int 21h
L1:
add bx,1
jmp GOB
L2:
add cx,1
jmp GOB
L3:
add dx,1
jmp GOB
L4:
add di,1
jmp GOB

GOB:
cmp al,'$'
je EXIT
jmp AGAIN
EXIT:


;++++++++++++++++++++++++++++++
ret
main endp
prognam ends
end start

无语法错误,运行直接给我输出:length is too long!了,请问错在哪里
...全文
167 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
masmaster 2012-04-17
  • 打赏
  • 举报
回复
1
用masm5.0以上编译
2
把下面两行去掉
main proc far
main endp
3
再把最后的ret换成
mov ax,4c00h
int 21h
4
再次编译,如果出错,则根据masm提示的行号,再仔细检查
BAYNPU 2012-04-16
  • 打赏
  • 举报
回复
;这个程序让你参考吧:
data segment
mess db 0dh,0ah,'Input String: $'
sz db 0
dAx db 0
xXx db 0
SZ_C DB 100 DUP ('$')
DX_C DB 100 DUP ('$')
XX_C DB 100 DUP ('$')
CRLF DB 0DH,0AH,'$'
data ends
code segment
assume cs:code, ds:data
main proc far
start:
push ds
xor ax,ax
push ax
mov ax,data
mov ds,ax
call crlf_p
mov ah,09
mov dx,offset mess
int 21h
next:
mov ah,01
int 21h
CMP AL,0DH
JNZ GOON
JMP DISP_1
GOON:
cmp al,'0'
jl NEXT
cmp al,'9'
jg NO_0_9
inc SZ
MOV BX,OFFSET SZ_C
MOV CX,0
MOV CL,SZ
ADD BX,CX
DEC BX
MOV [BX],AL
JMP NEXT
NO_0_9:
cmp al,'A'
jl NEXT
cmp al,'Z'
jg NO_D_AZ
inc DAX
MOV BX,OFFSET DX_C
MOV CX,0
MOV CL,DAX
ADD BX,CX
DEC BX
MOV [BX],AL
JMP NEXT
NO_D_AZ:
cmp al,'a'
jl NEXT
cmp al,'z'
jg NO_X_AZ
inc XXX
MOV BX,OFFSET XX_C
MOV CX,0
MOV CL,XXX
ADD BX,CX
DEC BX
MOV [BX],AL
JMP NEXT
NO_X_AZ:
JMP NEXT
DISP_1:
CALL CRLF_P
CALL CRLF_P
mov al,SZ
CALL DISP_CZR
mov ah,09
lea dx,SZ_C
int 21h
CALL CRLF_P
mov al,DAX
CALL DISP_CZR
mov ah,09
lea dx,DX_C
int 21h
CALL CRLF_P
mov al,XXX
CALL DISP_CZR
mov ah,09
lea dx,XX_C
int 21h
ret
main endp
DISP_CZR PROC NEAR
xor ah,ah
;mov al,num
mov bl,100d
div bl
push ax
add al,30h
mov dl,al
mov ah,2
int 21h
pop ax
mov al,ah
xor ah,ah
mov bl,10d
div bl
add ax,3030h
push ax
pop dx
mov ah,2
int 21h
mov dl,dh
int 21h
MOV DL,':'
INT 21H
mov dl,' '
int 21h
RET
DISP_CZR ENDP
CRLF_P PROC NEAR
mov ah,09
LEA DX,CRLF
INT 21H
RET
CRLF_P ENDP
code ends
end start

落尘季节 2012-04-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
读入字符的功能调用那里,应该是 mov ah, 1 吧,你笔误成了 mov al, 1
[/Quote]
谢谢,但是错误依旧啊
zara 2012-04-16
  • 打赏
  • 举报
回复
读入字符的功能调用那里,应该是 mov ah, 1 吧,你笔误成了 mov al, 1

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧