[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등은 메모리상태 및 프로그램실행 환경(!)을 도스모드로
에뮬레이트 했기때문에 문제 없이 잘 실행이 되는거라고 봅니다.

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

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.