안녕하세요 나는 다음과 같은 86-조립 있습니다이해 육각 옵 코드
8048062: 31 c0 xor eax,eax
8048064: 89 d8 mov eax,ebx
8048066: b8 01 00 00 00 mov eax,0x1
804806B: cd 80 int 0x80
내가 진수-op 코드를 이해하고자합니다. 나는 b8
과 89
이 mov 인 지침 인 here을 읽었습니다. 그러나 89 d8
의 두 번째 부분을 이해하지 못합니다. d8
은 무엇입니까? d8
eax 및 ebx입니까? 그래서 d는 eax이고 8은 ebx입니까? 하지만 왜 1 행 eax이고 eax == c0
입니까? 그리고 어디 라인 3에 b8 01 00 00 00
등록되어 있습니까?
왜 다음 줄이 맞습니까?
8048066: b8 01 00 00 00 mov eax,0x1
왜 안 :
b8 00 00 00 01 ?
EAX가로 나뉩니다
eax 32bit
ax 16 bit
ah 8bit
al 4bit
왜 올바른 b8 01 00 00 00
하지 b8 00 00 00 01
입니까? "리틀 엔디 언"의 원인?
내가 "mov al, 0x1"
을 사용할 때 헥스 연산 코드는 단지 b8 01
입니다. 나는 조금 혼란 스럽다.
난 당신이 날 도울 수 있기를 바랍니다 :)
Intel 사이트에서 x86 설명서를 다운로드하십시오. 이러한 질문에 대한 포괄적 인 대답은 SO 게시물에 비해 너무 광범위합니다. –
_ "왜 b8 01 00 00 00이 맞고'b8 00 00 00 01'이 아닌가?"_ x86 프로세서는 리틀 엔디안이고 32 비트 값 1의 리틀 엔디안 표현은 '01 00 00 00'. 회신을 위해 – Michael
thx michael. 그래서 나는 옳은 것 같았다. 그런데 왜 opcode 매개 변수 사이에 차이점이 있습니까? @ 500-InternalServerError 읽었지만 이해하지 못했습니다. 이 SIB/MODRM 일 것임 : S – Shibumi