天天看點

彙編實作一個0到9的整數輸入

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碼進行比較。

繼續閱讀