data segment
num BYTE ?
inputStr DB "please input a positive number:","$" ;定义提示输入的字符串
outStr DB "your input is:","$" ;定义输出的字符串
erroStr DB "erro input!","$" ;定义错误的字符串
CRLF DB 0AH, 0DH,'$' ;定义换行符
data ends
code segment
assume cs:code,ds:data ;段分配语句仅仅是建bai立段寄存器和段名之间关系
start:
main proc far
mov ax,data ;实就是把data(数据) 转到 DS 数据段寄存器,让数据段指向正确的位置。
mov ds,ax
lea dx,inputStr ;输入提示信息
mov ah,09h ;调用dos系统09号中断进行输出字符串
int 21h
mov ah,01h ;调用dos中断函数进行输入
int 21h
cmp al,'0'
jb erro ;小于0跳转到errr
cmp al,'9' ;大于9跳转
ja erro
jmp showInput ;输入在0到9之间则正常输出
showInput:
lea dx,CRLF ;换行
mov ah,09h
int 21h
lea dx,outStr ;输出提示信息
mov ah,09h ;调用dos系统09号中断进行输出字符串
int 21h
mov num,al ;将输入缓冲区的字符传送到num中
mov dl,num ;将num的值传送到输出缓冲区中
mov ah,02h ;调用dos系统02嗯呢中断进行输出字符
int 21h
jmp exit ;跳转到结束代码块
erro:
lea dx,CRLF ;换行
mov ah,09h
int 21h
lea dx,erroStr
mov ah,09h
int 21h
jmp exit
exit:
mov ah,4ch ;调用dos系统4c号中断进行结束程序,返回系统
int 21h
main endp
code ends
end start
ps:当我们输入获取的字符时,实际上获取的是一个ASCII码,因此当我们进行比较的时候必须要使用和ASCII码进行比较。