用汇编语言编写程序:从键盘输入一个字符,判断是否是数字?

时间:2021-04-03 22:15:25
用汇编语言编写程序:从键盘输入一个字符,判断是否是数字?

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


引用 5 楼 lizi5803 的回复:
数字的ASCII码为31-39,你检查一下键盘输入的值是否在31-39之间就可以了

写错了,是30-39

#7


学习了~
初学者一枚~

#8


谢谢

#9


ASCII最简单

#10


引用 3 楼 fandelei1982 的回复:
Assembly code
assumecs: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 segmentstart:mov ax,datamov ds,axlea dx,showmov ah,9int 21hmov ah,1int 21hcmp al,'0'jb nocmp al,'9'ja noyes:lea dx,msgmov ah,9int 21hjmp exitno:lea dx,msg2mov ah,9int 21hexit:mov ax,4c00hint 21h

code ends
end start

厚道~~~

#11


只要判断输入的字符是否在 字符'0' 和字符 ‘9’ 之间就行了。
判断指令用 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]

#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
 

#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


引用 5 楼 lizi5803 的回复:
数字的ASCII码为31-39,你检查一下键盘输入的值是否在31-39之间就可以了

写错了,是30-39

#7


学习了~
初学者一枚~

#8


谢谢

#9


ASCII最简单

#10


引用 3 楼 fandelei1982 的回复:
Assembly code
assumecs: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 segmentstart:mov ax,datamov ds,axlea dx,showmov ah,9int 21hmov ah,1int 21hcmp al,'0'jb nocmp al,'9'ja noyes:lea dx,msgmov ah,9int 21hjmp exitno:lea dx,msg2mov ah,9int 21hexit:mov ax,4c00hint 21h

code ends
end start

厚道~~~

#11


只要判断输入的字符是否在 字符'0' 和字符 ‘9’ 之间就行了。
判断指令用 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]

#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
 

#15


要是不止一个字符怎么办?