어셈블리어 질문입니다.

gyxor의 이미지

어셈블리어에서
8086 시스템에선 원래 각각의 레지스터가 16bit이므로 0~65535의 범위 즉 2의 16승밖에는
가질수 없지만 cs ds ss 레지스터는 각각 ip,bp,sp 포인터 레지스터와 연동해서
a41eh 이러한 16진수 주소가 있다고 할때 저장된 내용을 불러와서는
a41e0h 로 0을 더 붙여서 실재주소값은
예> cs + ip 가 되어서
a41e0h
+ 31ah
------------
a44fah
가 된다고 배웠습니다.
이로써 공간을 충분이 넓게 (2의 32승 -1 만큼의범위) 할당받을수 있다고 하더라구요
개념적으로는 이해가 되었는데요
계산해보니 이해가 안되더라구요
16진수 네자리 ffff 는 최대값 65535를 가지고
만약 cs가 10000h 라고의 단위로 끊어진다면 오른쪽 0000 네자리는 ip의 값으로 채울수
있구요
그래서 결론은 한자리수 더 늘어난 다섯자리 2의 20승의 범위(2의 32승이아니라)
를 가질수 있는데요
위 예> 에서 처럼 책에서는 cs의 값중 오른쪽 네자리를 비워놓지 않았습니다.
ip포인터를 채울수 있는데도 말이죠
물론 저렇게 하더라도 이러한 개념의 수행은 가능하다는 것은 알겠습니다.

첫째,
그런데 그 이유가 cs 코드세그먼트 레지스터에 있는 명령어들이 채워지는 순서대로
주소값이 정해지기 때문인가요?

둘째,
또한 배우기로 00을 두개 붙이면 전체범위는 중간부분까지밖에 콘트롤 할수 없게 된다는
데요 이유는 16bit는 64k(65535) 의 크기라서 그렇다는데 왜 그런지 이해할수가없습니다.
a41e00h
+ 31ah
------------
a4201ah
가능한거 같은데요
이런식으로 해서 0을 네게 0000 붙이면 2의 32승도 가능할거같은데요

셋째,
그렇다면 어떻게 해서 2의 32승의 범위를 콘트롤 할수 있다는 것인지 정말 알고싶습니다.

세가지 질문 답변 부탁드립니다.

익명 사용자의 이미지

gyxor wrote:
첫째,
그런데 그 이유가 cs 코드세그먼트 레지스터에 있는 명령어들이 채워지는 순서대로
주소값이 정해지기 때문인가요?

책이 잘못 되었습니다.

gyxor wrote:
둘째,
또한 배우기로 00을 두개 붙이면 전체범위는 중간부분까지밖에 콘트롤 할수 없게 된다는
데요 이유는 16bit는 64k(65535) 의 크기라서 그렇다는데 왜 그런지 이해할수가없습니다.
a41e00h
+ 31ah
------------
a4201ah
가능한거 같은데요
이런식으로 해서 0을 네게 0000 붙이면 2의 32승도 가능할거같은데요

그렇게 안되는 이유는 하드웨어적으로 지원하지 않기 때문입니다. 세그먼트 레지스터는 무조건 왼쪽으로 4칸 쉬프트하게 고정되어 있습니다.

gyxor wrote:
셋째,
그렇다면 어떻게 해서 2의 32승의 범위를 콘트롤 할수 있다는 것인지 정말 알고싶습니다.

8086에서는 불가능합니다.
cjh의 이미지

아무래도 16비트 레지스터 두개를 묶어서 32비트 연산이 가능하다는 점과 세그먼트 어드레싱에 대해서 혼동하시는 것 같은데, 전자는 32비트 연산을 할 수 있고(2^32), 후자는 주소 지정에만 사용되고 20비트로 고정되어 있습니다(8086과 그 이후 CPU의 호환 모드에서는).

--
익스펙토 페트로눔

댓글 달기

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