현재 문자를 가리 키기 위해 레지스터를 선택해야합니다. 일단 포인터가 가리키는 바이트를 읽는 지침뿐만 아니라 포인터를 앞으로 나아갈 지침이 있습니다.
사용자 입력 함수에서 읽는 문자의 수를 알 수 없으므로이 함수가 입력 값과 함께 작동하게하려면 몇 가지 루프가 필요하므로 비록 당신이 그것을 단순하게하고 싶다면, 입력 된 것과 관계없이 첫 3 글자 만 인쇄하도록 할 수있다. 나는 사용자가 타이핑 한 것과 정확히 일치하는 것을 인쇄하고 싶다고 가정 할 것이다.
이 문제를 해결하는 좋은 방법은 루프 본문을 CX 레지스터에 넣은 카운트만큼 반복 (점프)하는 LOOP 명령어를 사용하는 것입니다. 사용자 입력 함수는 문자 수를 제공하기 때문에 루프 초기화를 위해 CX 레지스터 (CL)의 하위 부분으로 읽어 들여야합니다. 또한 현재 문자를 가리키는 포인터가 필요합니다. 일단 루프 몸체에 들어가면 "현재 문자"포인터에있는 문자를 읽은 다음 DOS 문자 인쇄 기능을 호출하여 콘솔에 출력합니다. 그런 다음 모든 문자가 완료 될 때까지 포인터와 루프를 진행할 수 있습니다. LOOP 명령이 발생할 때마다 CX는 0에 도달 할 때까지 감소합니다. 일단 그것이 0이면, LOOP는 더 이상 몸으로 점프하지 않고 단순히 LOOP 다음의 명령으로 진행합니다.
참고 : 사용자 입력을 읽은 후 CRLF를 출력하지 않으면 줄 바꿈이 없으며 새 출력은 콘솔에서 입력을 읽은 위치를 덮어 씁니다. 사실 아무 일도 없었던 것처럼 보일 것입니다.
다음은 수정 된 샘플입니다 : _BX_에
0100 MOV AH,0A
0102 MOV DX,
0105 INT 21 ;input string using buffer at
0107 MOV DX,0120
010A MOV AH,09
010C INT 21 ;output CRLF sequence first
010E MOV SI,0124 ;point SI at byte containing chars read
0111 XOR CX,CX ;CX = 0
0113 MOV CL,[SI] ;CX = chars_read
0115 INC SI ;mov SI to next char to display
0116 MOV DL,[SI] ;DL = character SI is pointing at
0118 MOV AH,02
011A INT 21 ;display character
011C LOOP 0115 ;loop back to INC instruction until no more chars left
011E INT 20 ;exit
0120 DB 0D ;CR
0121 DB 0A ;LF
0122 DB 24 ;"$" DOS string terminator
DB 20 ;buffer start; max characters = 32
0124 DB 00 ; chars read goes here
0125 DB 00 ; input chars are read here
MOV (113), 및 해결을위한 _BX_를 사용합니다. 그런 다음 BX를 증가시켜 다음 메모리 위치로 이동할 수 있습니다. –
컴퓨터 메모리가 어떻게 작동하는지, 그리고 그 의미는 무엇입니까 [113]? 레지스터가 뭔지 아십니까? '[113]'을'113'로 변경하면 어떻게 될까요? 왜'mov dx, 111'라고 입력하면됩니까? (내가 무엇을 생각해야하는지 묻고있다). – Ped7g