2016-10-01 3 views
0

여기에 어셈블리 멍청함. 에코에서 어떤 표준 출력도 나오지 않습니다. 내가 파일 리디렉션을 수행 할 때stdout에 에코가 보이지 않습니다. 8086

mov ah, 01h ; 
int 21h  ; 

program.asm < 입력> 출력

출력되는 유일한 것은 내가 내가 명시 적으로 인쇄하는 정의하는 것입니다. 그러나 파일 리디렉션없이 프로그램을 실행하면 아무런 문제없이 입력 한 모든 내용을 볼 수 있습니다.

저는 DOSBox를 에뮬레이트하고 있습니다.

에코가 발생하지 않는 원인에 대한 아이디어가 있습니까?

+0

'int '가 운영체제에 들어가면이 질문에 OS를 포함 시켰을 때 가장 잘 진단 할 수 있습니다. – zneak

+0

질문에 추가, DOSBox 에뮬레이트 – Evan

+1

도스 박스가 01h로 반향 출력을 지원하지 않는 것 같습니다. 이유는 모르겠지만. 내가 stdout 파일 리디렉션 작업을 원한다면 에코로 08h와 02h를 사용하라는 말을 들었다. – Evan

답변

0

당신은 인쇄 당신이 DOS가 02h를 호출하고 DL 레지스터에 인쇄 할 ASCII 코드 설정 사용해야하는 콘솔에서 문자로하려면 다음

예 :

mov ah,02h 
mov dl,41h 
int 21h 
0

을 내 BIOS/DOS 참조는 DOS 기능 01h에 대해 다음을 알려줍니다.
이름이 "키보드InputWithEcho"은 곧 나올 문제를 암시합니다!

STDIN과 STDOUT 리디렉션하는 경우이 기능을 사용할 때 문제가 발생할 수 있습니다

  • 입력 파일에서 오는 경우, 확장 된 키보드 코드에 해당하지 않는 0 바이트가 반환 될 수있다 .
  • 이 기능은 V4 이전의 DOS 버전에서는 파일의 끝을 감지 할 수 없습니다.

입력을 파일에서 검색 할 수 있도록 STDIN을 리디렉션 할 때 이러한 고려 사항으로 인해 심각한 문제가 발생할 수 있습니다. 이 때문에 다른 DOS 입력 함수 (06h, 07h, 08h 또는 3Fh (핸들 0, STDIN 사용시))를 사용할 수 있습니다.

당신은 리디렉션 (program.asm < 입력> 출력)는 DOS 기능 08H를 사용하여 시작하는 것이 가장 것 두 종류를 사용하고 있기 때문에. 기능 01h와 가장 일치하는 것을 제공합니다. 사실 을 반향 출력하지 않습니다. 어쨌든 파일로 리디렉션 되길 원하기 때문에 중요하지 않습니다.
필요한 경우 02h 기능을 사용하여 화면의 각 문자를 표시하십시오.