15 个解决方案
#1
自己写吧
#2
根据asc来判断啊、
#3
assume cs:code,ds:data
data segment
show db "Input a charactor ",0dh,0ah,"$"
msg db " is a number",13,10,"$"
msg2 db " is not a number$"
data ends
code segment
start:
mov ax,data
mov ds,ax
lea dx,show
mov ah,9
int 21h
mov ah,1
int 21h
cmp al,'0'
jb no
cmp al,'9'
ja no
yes: lea dx,msg
mov ah,9
int 21h
jmp exit
no: lea dx,msg2
mov ah,9
int 21h
exit: mov ax,4c00h
int 21h
code ends
end start
#4
帮楼主顶,我刚学汇编。。。
#5
数字的ASCII码为31-39,你检查一下键盘输入的值是否在31-39之间就可以了
#6
写错了,是30-39
#7
学习了~
初学者一枚~
初学者一枚~
#8
谢谢
#9
ASCII最简单
#10
厚道~~~
#11
只要判断输入的字符是否在 字符'0' 和字符 ‘9’ 之间就行了。
判断指令用 cmp ja jna 就OK了。
判断指令用 cmp ja jna 就OK了。
#12
将输入字符当做无符号数,用cmp,jna,jnb实现跳转就行了吧!
#13
[code]
call @f
db '请输入一个数值', 0
@@:
call [printf]
pop edx
call [getchar]
cmp al, '0'
jb .No
cmp al, '9'
jg .No
@pushsz '输入的是一个数值'
call [printf]
pop edx
; pause
@pushsz 'pause'
call [system]
pop edx
retn
.No:
@pushsz '输入的不是一个数值'
call [printf]
pop edx
retn
[/code]
call @f
db '请输入一个数值', 0
@@:
call [printf]
pop edx
call [getchar]
cmp al, '0'
jb .No
cmp al, '9'
jg .No
@pushsz '输入的是一个数值'
call [printf]
pop edx
; pause
@pushsz 'pause'
call [system]
pop edx
retn
.No:
@pushsz '输入的不是一个数值'
call [printf]
pop edx
retn
[/code]
#14
call @f
db '请输入一个数值', 0
@@:
call [printf]
pop edx
call [getchar]
cmp al, '0'
jb .No
cmp al, '9'
jg .No
@pushsz '输入的是一个数值'
call [printf]
pop edx
; pause
@pushsz 'pause'
call [system]
pop edx
retn
.No:
@pushsz '输入的不是一个数值'
call [printf]
pop edx
retn
db '请输入一个数值', 0
@@:
call [printf]
pop edx
call [getchar]
cmp al, '0'
jb .No
cmp al, '9'
jg .No
@pushsz '输入的是一个数值'
call [printf]
pop edx
; pause
@pushsz 'pause'
call [system]
pop edx
retn
.No:
@pushsz '输入的不是一个数值'
call [printf]
pop edx
retn
#15
要是不止一个字符怎么办?
#1
自己写吧
#2
根据asc来判断啊、
#3
assume cs:code,ds:data
data segment
show db "Input a charactor ",0dh,0ah,"$"
msg db " is a number",13,10,"$"
msg2 db " is not a number$"
data ends
code segment
start:
mov ax,data
mov ds,ax
lea dx,show
mov ah,9
int 21h
mov ah,1
int 21h
cmp al,'0'
jb no
cmp al,'9'
ja no
yes: lea dx,msg
mov ah,9
int 21h
jmp exit
no: lea dx,msg2
mov ah,9
int 21h
exit: mov ax,4c00h
int 21h
code ends
end start
#4
帮楼主顶,我刚学汇编。。。
#5
数字的ASCII码为31-39,你检查一下键盘输入的值是否在31-39之间就可以了
#6
写错了,是30-39
#7
学习了~
初学者一枚~
初学者一枚~
#8
谢谢
#9
ASCII最简单
#10
厚道~~~
#11
只要判断输入的字符是否在 字符'0' 和字符 ‘9’ 之间就行了。
判断指令用 cmp ja jna 就OK了。
判断指令用 cmp ja jna 就OK了。
#12
将输入字符当做无符号数,用cmp,jna,jnb实现跳转就行了吧!
#13
[code]
call @f
db '请输入一个数值', 0
@@:
call [printf]
pop edx
call [getchar]
cmp al, '0'
jb .No
cmp al, '9'
jg .No
@pushsz '输入的是一个数值'
call [printf]
pop edx
; pause
@pushsz 'pause'
call [system]
pop edx
retn
.No:
@pushsz '输入的不是一个数值'
call [printf]
pop edx
retn
[/code]
call @f
db '请输入一个数值', 0
@@:
call [printf]
pop edx
call [getchar]
cmp al, '0'
jb .No
cmp al, '9'
jg .No
@pushsz '输入的是一个数值'
call [printf]
pop edx
; pause
@pushsz 'pause'
call [system]
pop edx
retn
.No:
@pushsz '输入的不是一个数值'
call [printf]
pop edx
retn
[/code]
#14
call @f
db '请输入一个数值', 0
@@:
call [printf]
pop edx
call [getchar]
cmp al, '0'
jb .No
cmp al, '9'
jg .No
@pushsz '输入的是一个数值'
call [printf]
pop edx
; pause
@pushsz 'pause'
call [system]
pop edx
retn
.No:
@pushsz '输入的不是一个数值'
call [printf]
pop edx
retn
db '请输入一个数值', 0
@@:
call [printf]
pop edx
call [getchar]
cmp al, '0'
jb .No
cmp al, '9'
jg .No
@pushsz '输入的是一个数值'
call [printf]
pop edx
; pause
@pushsz 'pause'
call [system]
pop edx
retn
.No:
@pushsz '输入的不是一个数值'
call [printf]
pop edx
retn
#15
要是不止一个字符怎么办?