簡體   English   中英

檢查字符串是否為M68k中的字母數字

[英]Checking if a string is alphanumeric in M68k

我覺得這是相對容易做到的事情,但是我不知道該怎么做。 對於我的任務,您不能使用結構化的控制命令(如果-然后-其他-Endif;如果-然后-Endif)。 所以我必須使用分支。 以下是我用來檢查字符范圍的內容(A0包含我正在檢查的字符串結尾的地址,而D0是字符串的長度)

str_chk  MOVE.B     -(A0),D1     ; get current character from memory
         CMP.B      #$30,D1      ; check if character is less than ASCII '0'
         BLO        err_range
         CMP.B      #$39,D1      ; check if character is greater than ASCII '9'
         BHI        err_range
         SUBQ       #1,D0
         BNE        str_chk

由於小寫和大寫字母都超出此范圍,因此將導致錯誤。 我有什么辦法可以解決這個問題? 我是否應該只具有粗略的代碼並具有諸如

CMP.B    #$3A,D1
BEQ      err_range

用於30到7A之間的13個左右的非字母字符。

這樣的事情怎么樣:

str_chk  MOVE.B     -(A0),D1     ; get current character from memory
         CMP.B      #$30,D1      ; check if character is less than ASCII '0'
         BLO        err_range
         CMP.B      #$39,D1      ; check if character is greater than ASCII '9'
         BLS        is_alnum
         ; It wasn't a digit. Check if it's in the range 'A'..'Z' or 'a'..'z'
         ANDI       #$DF,D1      ; convert to uppercase
         CMP.B      #65,D1       ; 'A'
         BLO        err_range    ; > '9' but < 'A': not alphanumeric
         CMP.B      #90,D1       ; 'Z'
         BHI        err_range    ; > 'Z': not alphanumeric
is_alnum
         SUBQ       #1,D0
         BNE        str_chk

檢查第一個D1以查看它是否包含數字。 如果沒有,我們檢查它是否包含'A'..'Z''a'..'z' 大寫字母和小寫字母之間的唯一區別是,將第5位設置為小寫字母,因此我們使用ANDI指令清除了第5位,因此我們只需要與'A'..'Z'進行比較。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM