어셈블리 언어- 8086
환경 에서 문자열의 입력 및 출력을 연습하고 있습니다. 다음 코드를 발견했습니다.
org 100h
.DATA
SNAME DB 21,0,22 DUP('$')
.CODE
MOV AH, 0AH
LEA DX, SNAME
INT 21H
MOV AH, 9H
LEA DX, SNAME +2;
INT 21H
ret
프로그램이 키보드에서 문자열로 입력을 받아 화면에 표시한다는 것을 알고 있습니다. 그러나 여기에 두 가지가 누락되었습니다 .
사용자 입력이 변수에 저장 된다는 것을 어떻게 알 수 SNAME
있습니까? 명령 LEA
이 프로그램이 그것을 알게하나요? 나는 높은 수준의 언어로 우리가 말할 수 있기 때문에 이것을 요청했습니다 SNAME=someUserInput;
.MOV SMANE,someUserInput;
왜 우리 2
는이 instaruction에 추가 LEA DX,SNAME +2
합니까?
사용자 입력이 변수 SNAME에 저장된다는 것을 어떻게 알 수 있습니까?
프로그램은 입력 된 문자를 수신하기 위해 버퍼를 설정해야하는 DOS 입력 기능 0Ah를 사용하기 때문입니다. 오프셋 0의 바이트는 오프셋 2에서 시작하여 사용할 수있는 바이트 수를 지정해야합니다. 21을 지정 하면 20 자를 입력 할 수 있습니다 . 추가 바이트는 캐리지 리턴 (ASCII 13)으로 채워집니다.
이 instaruction LEA DX, SNAME +2에 2를 추가하는 이유는 무엇입니까?
DOS 입력 기능은 사용자가 지정한 버퍼 내 오프셋 2에서 시작하는 입력 된 문자를 저장합니다. 오프셋 1에서 입력 된 문자 수를 포함하는 바이트를 찾을 수 있습니다. 이러한 입력 된 문자 뒤에 DOS는 캐리지 리턴 (ASCII 13)을 추가합니다. 이것은 당신이 한 방식으로 인쇄하면 필연적으로 커서가 줄의 시작 부분에 남게된다는 것을 의미합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다