汇编语言中输入字符串的长度

时间:2013-10-24 03:31:49

标签: string assembly x86 dos

我想做两件事:
1)从用户中取一个字符串 2)找到该字符串的长度

我尝试了以下代码:

.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

但我很困惑如何将长度存储在CL寄存器中,即ACT_LEN值如何递增?实际上mov AH,0A与长度有什么关系?

1 个答案:

答案 0 :(得分:3)

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)

缓冲输入中断将填入这些值。

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

您不需要LEA DX,ACT_DATA

mov AH,0A是要调用的中断号。 Ralph Brown has a big list中断与描述以及进/出的内容。