汇编实现一个0到9的整数输入

发布于 2020-07-21  253 次阅读


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码进行比较。


繁华落尽,雪花漫天飞舞。