Jay Patel
Jay Patel

Reputation: 1346

Length of input string in assembly language

I want to do two things:
1) Take a string from user
2) Find the length of that string

I tried the following code:

.model small    
.stack 100h
.data
    MAXLEN DB 100
    ACT_LEN DB 0                ;Actual length of the string  
    ACT_DATA DB 100 DUP('$')    ;String will be stored in ACT_DATA
    MSG1 DB 10,13,'ENTER STRING : $'
.CODE
START:
    MOV AX,@data
    MOV DS,AX
    ;Normal printing 
    LEA DX,MSG1
    MOV AH,09H
    INT 21H
    ;Cant understand code from here!
    LEA DX,ACT_DATA
    MOV AH,0AH
    MOV DX,OFFSET MAXLEN
    INT 21H

    LEA SI,ACT_DATA
    MOV CL,ACT_LEN

    ;AND THEH SOME OPERATIONS

END START

But I am confused how the length is stored in CL register, i.e. how the ACT_LEN value is incremented? And what actually does mov AH,0A has relation with length?

Upvotes: 1

Views: 13086

Answers (1)

Gunner
Gunner

Reputation: 5884

Int 21/AH=0Ah

Format of DOS input buffer:

Offset  Size    Description     (Table 01344)
00h    BYTE    maximum characters buffer can hold (MAXLEN)
01h    BYTE    (call) number of chars from last input which may be recalled (ACT_LEN)
(ret) number of characters actually read, excluding CR
02h  N BYTEs   actual characters read, including the final carriage return (ACT_DATA)

The buffered input interrupt will fill in these values.

LEA DX,ACT_DATA
MOV AH,0AH
MOV DX,OFFSET MAXLEN
INT 21H

You do not need LEA DX,ACT_DATA

mov AH,0A is the number of the interrupt to call. Ralph Brown has a big list of interrupts with descriptions and what goes in/comes out.

Upvotes: 3

Related Questions