2012-06-18 4 views
0

간단한 부트로 gnu를 사용하고 있습니다. 출력의 16 진 덤프되는 동안가스. org가 nasm의 ORG와 다른가요?

.text 
.org 0x7c00 
start: 
    movw $0x7c0, %ax 
    movw %ax, %ds 
    movw %ax, %es 
    leaw greeting_msg, %si 
    call prtstr 
.... 

end: 
    .fill 510-(end - start), 1, 0 
    .word 0xAA55 

:

○ → hexdump bare.o 
0000000 0000 0000 0000 0000 0000 0000 0000 0000 
* 
0007c00 c0b8 8e07 8ed8 8dc0 7f36 e87c 0046 02b8 
0007c10 bb4f 4115 10cd f883 754f a133 4f01 3e8d 
0007c20 7c97 15b9 cd41 8310 4ff8 2275 8b66 9b16 

NASM에서 ORG와 동일하게 동작하지 않는 그것은이 같은 뭔가? NASM을 사용하면 다음과 같이 출력됩니다.

○ → hexdump test_org 
0000000 c031 d88e 14be ac7c c008 0674 0eb4 10cd 
0000010 f5eb feeb 6557 636c 6d6f 2065 6f74 4d20 
0000020 6361 6e69 6f74 6873 0a0d 0000 0000 0000 
0000030 0000 0000 0000 0000 0000 0000 0000 0000 

무엇이 잘못 되었나요? 감사.

답변

1

GAS의 .org은 NASM의 .org이 아닙니다. 가스 .org 현재 위치 카운터를 사전에 얼마나 많은 나타내며, 다음과 같습니다

채우기 아무것도 ( more info here)

.org에서 지정하지 않는 경우는 제로로, 이는 기본값을 채우기 위해 사용하는 것입니다

.org expr, fill 

NASM이 모듈이 배치 될 메모리 주소를 나타냅니다 (따라서 정확한 지점과 점프 명령 생성) 나는 당신이 플랫 바이너리 파일 NASM을 사용하는 것이 좋습니다 (more info here)

를, 리튬 항상 일 나를 위해 매력.

+0

답변 해 주셔서 감사합니다. GAS에 지시가 있습니까? – wliao

+0

NASM을 사용하지 않는 이유는 무엇입니까? – m0skit0

+0

@ m0skit0 그것은 완전히 다른 구문을 배우기 때문입니다. 사람들은 여러 가지 이유로 어느 쪽이든을 선호 할 수 있습니다. 가스에 비슷한 지시가 있습니까? – Hawken

1

(Nasm의) 바이너리를 (G)의 링크 가능한 .o 파일과 비교하고 있습니다. 나는 "bare.o"를 ld ... "ld -o bare.bin -oformat binary bare.o"(문법을 모르겠다)에 연결하면 기대 한 것과 더 가까운 것을 생각해 낼 수있을 것이다. 또는 ... 그냥 nasm을 사용하십시오.