[Assembly] 윈도 XP 콘솔창에서 01h input을 받을경우 오류..

gyxor의 이미지

윈도 xp에서의 콘솔창은 그 자체가 OS가 아니라 하나의 응용프로그램으로 알고있습니다.
그래서 그런지 이상한 오류가 나타납니다.

SEG1 SEGMENT
X DB ?
ORG 100H
MOV AH,1
INT 21H

DEC AL
MOV X,AL

MOV DL,0DH
MOV AH,02H
INT 21H

MOV DL,0AH
MOV AH,02H
INT 21H

MOV DL,X
MOV AH,02H
INT 21H

MOV AH,4CH
INT 21H

SEG1 SEGMENT


위 코드는 COM 코드이고 A86 어셈블러로 어셈블 해봤습니다.
형식상의 문제가 아닌가해서.. 다른 형식으로 다 해봤습니다.

동일한 내용인

     .MODEL SMALL
     .STACK 64
     .DATA
X     DB   ?
     .CODE

A10MAIN    PROC FAR  
     MOV   AX,@data
     MOV   DS,AX
     MOV   AH,1
     INT   21H

     DEC   AL
     MOV   X ,AL
     MOV   DL,0DH
     MOV   AH,02H
     INT   21H

     MOV   DL,0AH
     MOV   AH,02H
     INT   21H

     MOV   DL,X
     MOV   AH,02H
     INT   21H

     MOV   AH,4CH
     INT   21H
      
A10MAIN  ENDP 
         END A10MAIN

축약형 코드 입니다. EXE파일입니다. MASM5.1로 어셈블해봤습니다.
STACKSG SEGMENT PARA STACK 'Stack'
        DW        32 DUP(0)
STACKSG ENDS
DATASG        SEGMENT PARA        'Data'
X        DB   ?
DATASG  ENDS
CODESG        SEGMENT PARA        'Code'
MAIN        PROC        FAR
        ASSUME        SS:STACKSG,DS:DATASG,CS:CODESG
        MOV        AX,DATASG
        MOV        DS,AX
   
        MOV        AH,1
        INT     21H

        DEC     AL
        MOV     X ,AL
        MOV     DL,0DH
        MOV     AH,02H
        INT     21H

        MOV     DL,0AH
        MOV     AH,02H
        INT     21H

        MOV     DL,X
        MOV     AH,02H
        INT     21H

        MOV        AH,4CH
        INT        21H
MAIN        ENDP
CODESG        ENDS
        END        MAIN

역시 동일한 내용인 재래식 EXE형입니다. MASM5.1 과 MASM6.15로도
해봤습니다.

모든 실행에서 다음과 같은 오류가 생깁니다.
(물론 어셈블되고 실행파일 생성은 잘 됩니다.)
프로그램을 실행시키고 처음에는 잘 돌아갑니다.
입력 아스키값보다 하나작은 문자를 출력하는 프로그램입니다.
2를 입력하면 1이 출력되고 B를 입력하면 A가 출력됩니다.
그런데 반복해서 실행을 하다보면 7번째 부터는 콘솔창에 입력 글자가 에코되지 않고
출력글자도 에코되지 않습니다.

D:\MASM\Test>CCC 
P 
O 
D:\MASM\Test>CCC 
P 
O 
D:\MASM\Test>CCC 
P 
O 
D:\MASM\Test>CCC 
P 
O 
D:\MASM\Test>CCC 
P 
O 
D:\MASM\Test>CCC 
P 
O 
D:\MASM\Test>CCC 
P 
O 
D:\MASM\Test>CCC 
P 
O 
D:\MASM\Test>CCC 
P 
O 
D:\MASM\Test>CCC 


D:\MASM\Test>CCC 


D:\MASM\Test>CCC 


D:\MASM\Test>CCC 



또는 한영 key가 눌려져서 한글모드가 되어있거나 하는 괴이한 현상이 벌어집니다.

두번째 실행 때 부터는 화면에 에코가 안됩니다.

어디가 잘못된 것인지 설명부탁드립니다.
ps: MASM 버젼이 다르면 무슨 차이가 있는지 알려주시면 감사하겠습니다.
LINK.EXE 파일도 달라지나요?

gyxor의 이미지

도스박스 라는 프로그램을 사용하니까 ..
이상한 현상이 없어졌습니다.
매우 유용하네요..
하지만 xp의 콘솔에서 나타난 저 현상은
도대체 어떻게 생긴 것인지 정말 이해가 안됩니다............

mirr의 이미지

gyxor wrote:
도스박스 라는 프로그램을 사용하니까 ..
이상한 현상이 없어졌습니다.
매우 유용하네요..
하지만 xp의 콘솔에서 나타난 저 현상은
도대체 어떻게 생긴 것인지 정말 이해가 안됩니다............

XP의 cmd.exe 콘솔창은 단지 도스의 명령라인과 최소부분들을 에뮬레이터 해논거라
메모리상태나, 기타 여러가지 유기적으로 연결되어있는 부분들이 구현되어 있지 않다고 알고있습니다.

하지만 DOSBOX등은 메모리상태 및 프로그램실행 환경(!)을 도스모드로
에뮬레이트 했기때문에 문제 없이 잘 실행이 되는거라고 봅니다.

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.