2014-09-24 4 views
0

나는 이상한 문제를 겪고 있습니다. x86 어셈블리에서 32 비트 레지스터 (eax, ebx 등)는 256에서 오버플로되어 실제로 8 비트임을 암시합니다.32 비트 레지스터는 8 비트 비트의 역할을합니다

test.s :

section .data 
section .text 

global _start 
_start: 
    mov eax, 1 
    mov ebx, 256 
    int 80h 

그때 nasm -felf32 -g test.s && ld -m elf_i386 -s -o test test.s이 코드를 컴파일하고 결과 실행 파일을 실행하면, 그것은 0으로이 같은 문제가 EAX, ECX, EDX, 등에 발생 반환 예를 들어

어떤 상황에서 32 비트 레지스터가 8 비트 정수처럼 작동하는 이유는 무엇입니까?

답변

5

그것은 단지 반환 코드 ebx의 하위 8 비트를 사용 exit 시스템 호출의 상기 레지스터 주위에 배치 아니다. exit 사람이 페이지에서

:

exit() 기능은 정상적인 프로세스 종료를 발생시키고 status & 0377의 값이 부모에게 반환됩니다 (wait(2) 참조). 단지 하위 8 비트가 사용되는 것을 의미 03770xff (이진 1111 1111)의 등가 진수임을

. wait() (부모)에서 돌아 오는 다른 비트는 하위 프로세스의 종료 여부, 사용 된 신호, 코어 덤프의 발생 여부 등을 나타내는 데 사용됩니다.

관련 문제