1

我想做两件事:
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与长度有什么关系?

4

1 回答 1

3

诠释 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是要调用的中断号。 拉尔夫布朗有一大堆中断的描述以及进/出的内容。

于 2013-10-24T03:58:40.347 回答