[완료] 어셈블리 list파일

jungwook의 이미지

안녕하세요.
지금 만들면서 배우는 os 커널을 공부하고 있는 학생입니다.
어셈블리어 파일을 리스트 파일로 만들었는데
여기서 젤 처음 숫자는 줄 번호고요, 그다임이 프로그램 내에서 offset인데,
3번째가 어셈블리어를 어셈블해서 나온 기계어로 알고 있습니다.
그런데 예를 들어 첫 줄 mov ax, cs 기계어로 변환 => 8CC8
이렇게 된거 아닌가요? 그렇다면 ax와 cs가 각각 16bit씩인데, mov에 대한 기계어 부분은 어떻게 된것인지??
좀 알려주세요..
그럼 모두 즐거운 하루 되세요.

 
     4                                  [org 0]
     5                                  [bits 16]
     6                                  
     7                                  start:
     8 00000000 8CC8                    		mov	ax, cs
     9 00000002 8ED8                    		mov	ds, ax
    10 00000004 31C0                    		xor	ax, ax
    11 00000006 8ED0                    		mov	ss, ax
    12                                  
    13                                  
    14 00000008 FA                      		cli
    15                                  
    16 00000009 0F0116[7F00]            		lgdt[gdtr]
    17                                  
    18 0000000E 0F20C0                  		mov	eax, cr0
    19 00000011 660D01000000            		or		eax, 0x00000001
    20 00000017 0F22C0                  		mov	cr0, eax
    21                                 
klenui의 이미지

레지스터가 몇천개씩이나 있지는 않을테니 레지스터를 오퍼랜드로 지정하는데 많은 비트가 필요하지는 않겠지요.

MOV 명령 몇 비트 + 오퍼랜드 타입 몇비트 + 오퍼랜드인 레지스터 번호 몇비트 <- 이렇게 해서 16비트가 나왔을 겁니다.

자세한건 op 코드를 설명해 놓은 문서나 책을 찾아보세요.

ifree의 이미지

레지스터 ax 에 들어가는 데이타가 16 비트라는 뜻입니다. ax 를 표현하는데 16비트가 필요하진 않습니다.

jungwook의 이미지

아~ 착각을 했네요. ㅎ
답변 감사드립니다.^^
즐거운 하루 되세요

Necromancer의 이미지

해독 해드린다면

0x8c = mov 명령
0xc8 = 2진수로 바꾸면 11001000
두번째 0xc8은 Mod R/M이라고 불리는 부분인데 오퍼랜드 조합이 무엇인지 알려주는 역할 합니다.

11 = 레지스터/메모리 조합여부 결정 (보통 11이면 모두 레지스터임)
001 = destination register (CS=0, DS=1, ...) ==>
000 = source register (AX=0, CX=1, DX=2, BX=3, BP=4 ...)

이정도면 충분하므로 뒤는 더 필요 없습니다.

mov 명령의 기계어코드는 0x8c말고도 많습니다. 오퍼랜드에 들어올 수 있는 조합이 하도 많기 때문에 이거 하나가지고는 다 못하죠.

Written By the Black Knight of Destruction

Written By the Black Knight of Destruction

댓글 달기

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