어셈블리어관련 질문입니다. AH,3FH instruction 내용

gyxor의 이미지

.MODEL SMALL
.STACK 64
.DATA
FLEE1 DB 5 DUP(0),'$'
FLEE2 DB '*','$'
.CODE
MAIN PROC FAR
MOV AX,@DATA
MOV DS,AX

MOV AH,3FH
MOV BX,00
MOV CX,5
LEA DX,FLEE1
INT 21H

MOV AH,09H
LEA DX,FLEE1
INT 21H

MOV AH,09H
LEA DX,FLEE2
INT 21H
MOV AX,4C00H
INT 21H
MAIN ENDP
END MAIN

예제는 이 내용 그대로 입니다.

111112222233333 을 입력했을때와
22
333
4444
55555444
이런 다섯가지 경우입니다.
22의 경우엔

<실행화면>
22(엔터누름)
22
*
이렇게 되는데요
화면에 0AH 가 한번더 에코되는것을 볼수있습니다.
22 하고서 엔터를 누르는 과정에서요..
긴문자열의 경우
111112222233333 입력시에
11111*222233333
이런식으로 캐리지리턴만을 에코하는것과 비교해 봤을때
이해하기가 어렵습니다.
답변부탁드립니다.
꾸벅~

mach의 이미지

3Fh 함수의 기능에 대해 레퍼런스를 달아주세요. 예전이나, 지금이나, 도스 함수들은 함수이름 자체도 암호라서리......
글구, 이왕이면 어셈공부하실때, 가급적 Int 21h또는 바이오스 인터럽트 사용하지 마시고, IO Port또는 주소를 직접제어하셔서 코딩해보시는게 좋으실듯합니다. 그래야 많이 남는것 같아요. 이를 테면 멀티태스킹커널이나, 디바이스 드라이버등은 도스콜이나 바이오스인터럽트 사용하지 않아야 하지요.
그리고, 혹시나하고 말씀드리면, [엔터키] => [CR][LF]이고 이 또한 입력데이터로 취급이 될텐데 2바이트지요. 이점 고려하셨는지요?
이를테면 123[CR][LF]는 가장 이상적인 입력이지요? 적어도 님의 프로그램에서는? 5바이트니까요.
12라면 12[cr][lf][dummy] 모 이렇게 되어야 겠네요.
1이라면 1[cr][lf][dummy][dummy]가 될거로 보이구요.
데이터가 1234등 5바이트가 넘치는 경우는, 다시 실행해봐야 할듯하고(왜냐면 키보드버퍼에 여분이 있을테니...)
쩝, 횡설수설 죄송합니다.

------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.

gyxor의 이미지

답변감사합니다.
3FH 는 버퍼를 사용하며 DX 레지스터의 주소값에 CX 레지스터 에 할당된 양만큼을 저장합니다.
5개를 입력하도록 하고서
AAA를 입력하면 DX가 가리키는 주소값에는
AAA ODH OAH 가 들어가게 됩니다.
만약 8글자를 입력하면
AAAAAEEE

DX에 우선은 AAAAA 가 들어가게 되고
버퍼에는 EEE ODH 가 남고요
다음에 DX로 불러오면 EEE ODH OAH 5개 들어갑니다.
그래서 마지막에서 글자길이는 3+2 = 5 로 계산합니다.(중요한건 아니지만)
중요한것은
님께서 말씀하셨듯이..
저의 경우에도 엔터 = ODH + OAH 인줄 알았는데요
교수님께 질문을 드린결과 아니었습니다.
엔터 = ODH 입니다.
그러니까 요약하자면
입력 AAA ODH(엔터)
화면에 에코 AAA ODH
버퍼 AAA ODH
저장 AAA ODH OAH
라는 것이죠 ODH 를 버퍼에서 불러올때 OAH 를 붙여준다는 것입니다.
여기까지가 교수님께 들은것이구요
그이상은 모르시겠다는군요..
위의 5가지 경우를 직접 해보시면 아시겠지만 문자열이 길고 짧은
여러 경우에서 일관성이 없고..
어느경우에는 OAH 가 화면에 한번더 에코가 됩니다.

답변부탁드립니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.