Solved

CALL getC

Posted on 2004-04-04
8
300 Views
Last Modified: 2006-11-17
I use call getc to read in a character from the keyboard in a label called reads1, which test if the character is  lowecase or uppercase.  a label isUPPER & isLOWER display messages.

I have in my lecture notes JE (Jump if equal) - a code for testing equality.  How does this check if the characters read from the keyboard is uppercase or lowecase?

.MODEL      SMALL
.STACK      100h

.DATA

bdos      EQU 21H
cr      EQU 0DH
lf      EQU 0AH

enter1      DB      'Enter a character $'
UPPER   DB      ' The character is uppercase $'
LOWER   DB      ' The character is lowercase $'
NUMERIC DB      ' The character is numeric $'
NEITHER DB       ' The character is not lowercase, uppercase or numeric $'

.CODE

INCLUDE ioproc.asm

start:
      MOV AX,@data
      MOV DS,AX
      CALL newline

reads1:
      MOV DX,OFFSET(enter1)
      MOV AH,09H
      INT bdos
      CALL newline

      CALL getc
      CMP AL,cr
      JE isUPPER
      ;CMP AL,cr
      ;JE isLOWER
      
      MOV DX,OFFSET(NEITHER)
      MOV AH,09H
      INT bdos
      CALL newline
      JMP reads1

isUPPER:
      MOV DX,OFFSET(UPPER)
      MOV AH,09H
      INT bdos
      CALL newline
      JMP reads1

isLOWER:
      MOV DX,OFFSET(LOWER)
      MOV AH,09H
      INT bdos
      CALL newline
      JMP reads1

isNUMERIC:
      MOV DX,OFFSET(NUMERIC)
      MOV AH,09H
      INT bdos
      CALL newline
      JMP reads1
      
isNEITHER:
      MOV DX,OFFSET(NEITHER)
      MOV AH,09H
      INT bdos
      CALL newline
      JMP reads1

finish:
      CALL newline
      MOV AX,4C00H
      INT bdos
      END start
0
Comment
Question by:gbilios
  • 4
  • 3
8 Comments
 
LVL 8

Expert Comment

by:manish_regmi
ID: 10755534
hi,
You can check if character is greater than 64 and smaller than 91, it is upper case and if
it is greater than 96 and  smaller than 126.

/* check if the character in al is in upper case */
cmp al, 64
ja chk2 /* if above */
; not in upper case

chk2:

cmp al, 91
jb upper /* if below */

upper:
;print upper /* It is in upper case */

similarly do for lower case,
cmp al, 96
ja chk2 /* if above */
; not in upper case

chk2:

cmp al, 126
jb upper /* if below */

upper:
;print lower /* it is in lower case */
0
 
LVL 6

Expert Comment

by:joghurt
ID: 10755556
As a note, in most compilers you can use characters constants to make the source more human-readable.

/* check if the character in al is in upper case */
cmp al, 'A'
jge chk2 /* if greater or equal */
; not in upper case

chk2:

cmp al, 'Z'
jl upper /* if less */

upper:
;print upper /* It is in upper case */

similarly do for lower case,
cmp al, 'a'
jge chk2 /* if greater or equal */
; not in upper case

chk2:

cmp al, 'z'
jl upper /* if less */

upper:
;print lower /* it is in lower case */
0
 

Author Comment

by:gbilios
ID: 10755661
For the reply.  i added the code and tested it.  I get a the same result if i read in a lowercase or uppercase.  Have i got it right?

reads1:
      MOV DX,OFFSET(enter1)
      MOV AH,09H
      INT bdos
      CALL newline

      CALL getc
      CMP AL,cr
      CMP AL,64
      JA isLOWER

      ;CMP AL,91
      ;JB isUPPER
      ;CMP AL,cr
      ;JE isLOWER
      
      MOV DX,OFFSET(NEITHER)
      MOV AH,09H
      INT bdos
      CALL newline
      JMP reads1

isUPPER:
      MOV DX,OFFSET(UPPER)
      MOV AH,09H
      INT bdos
      CALL newline
      JMP reads1

isLOWER:
      MOV DX,OFFSET(LOWER)
      MOV AH,09H
      INT bdos
      CALL newline
      JMP reads1
0
 
LVL 8

Expert Comment

by:manish_regmi
ID: 10755711
hi,
Do it this way.
reads1:
     MOV DX,OFFSET(enter1)
     MOV AH,09H
     INT bdos
     CALL newline

     CALL getc
   ;  CMP AL,cr
     CMP AL,64
     JA isUPPER
   cmp al, 96
  ja isLOWER

     ;CMP AL,91
     ;JB isUPPER
     ;CMP AL,cr
     ;JE isLOWER
     
     MOV DX,OFFSET(NEITHER)
     MOV AH,09H
     INT bdos
     CALL newline
     JMP reads1

isUPPER:
    cmp al, 91
ja goend
     MOV DX,OFFSET(UPPER)
     MOV AH,09H
     INT bdos
     CALL newline
     JMP reads1

isLOWER:
 cmp al, 126
ja goend
     MOV DX,OFFSET(LOWER)
     MOV AH,09H
     INT bdos
     CALL newline
     JMP reads1
goend:
 end

regards manish

0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 

Author Comment

by:gbilios
ID: 10755721
If i wanted to test if the character was a numeric type, then would I use the following:

CALL getc
CMP AL,cr

CMP AL,9
JB isNUMERIC
0
 
LVL 8

Expert Comment

by:manish_regmi
ID: 10755754
no,
check for the ascii value
0= 48,

cmp al, 47
ja chk2

chk2:
cmp al, 58
ja end
print it is numeric.

in short numeric value is fro 48 to 57.

regards manish
0
 

Author Comment

by:gbilios
ID: 10755857
Not sure why the isNumeric is overriden.  i tested it on its own and works but not with the code below.

reads1:
      MOV DX,OFFSET(enter1)
      MOV AH,09H
      INT bdos
      CALL newline

      CALL getc
      CMP AL,cr

      CMP AL,96
      JA isLOWER

      CMP AL,126
      JB isUPPER
      
      CMP AL,58
      JB isNumeric
;else
      MOV DX,OFFSET(NEITHER)
      MOV AH,09H
      INT bdos
      CALL newline
      JMP reads1
0
 
LVL 8

Accepted Solution

by:
manish_regmi earned 30 total points
ID: 10755961
hi,
 In your code , you never code to isNumeric
do it,
reads1:
     MOV DX,OFFSET(enter1)
     MOV AH,09H
     INT bdos
     CALL newline

     CALL getc
     CMP AL,cr
do_lower:
     CMP AL,96
     JA isLOWER
do_upper:
     CMP AL,64
     JA isUPPER
do_num:
     CMP AL,47
     JA isNumeric
;else
     MOV DX,OFFSET(NEITHER)
     MOV AH,09H
     INT bdos
     CALL newline
     JMP reads1

regards
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
MASM equivilent to _emit 8 744
Request a tutorial for MS Assembly 3 314
assembly flow 3 577
How to find out if watchdog driver execution area is from ROM(Flash Memory) or RAM ? 1 382
This article shows gives you an overview on SQL Server 2016 row level security. You will also get to know the usages of row-level-security and how it works
A customer recently asked me about anti-malware and the different deployment options available for his business. Daily news about cyberattacks, zero-day vulnerabilities, and companies that suffered a security breach made him wonder if the endpoint a…
This demo shows you how to set up the containerized NetScaler CPX with NetScaler Management and Analytics System in a non-routable Mesos/Marathon environment for use with Micro-Services applications.
This is a video that shows how the OnPage alerts system integrates into ConnectWise, how a trigger is set, how a page is sent via the trigger, and how the SENT, DELIVERED, READ & REPLIED receipts get entered into the internal tab of the ConnectWise …

911 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

25 Experts available now in Live!

Get 1:1 Help Now