2012-07-17 2 views
0

Gnu에서 'Hello World'를 관리했습니다!

그럼 다음은 인쇄물 1 ~ 10 권입니까? (어쩌면 루비에서)

지금 당장은 B 뒤에 밀접하게 B를 인쇄 해 드리겠습니다.

.section .text 
    .globl _start 

_start: 
    # Print A 
    movl $4,%eax 
    pushl $0x41 
    movl %esp,%ecx  # Would rather movl $0x41,%ecx 
    movl $1,%ebx 
    movl $1,%edx 
    int $0x80 

    # Closely followed by B 
    movl $4,%eax 
    incl (%esp)   # Rather incl(%ecx) here 
    movl %esp,%ecx 
    movl $1,%ebx 
    movl $1,%edx 
    int $0x80 

    movl $1,%eax 
    movl $0,%ebx 
    int $0x80 

그리고 실제로 작동하지만, 내 질문은 나중에에

incl (%ecx) 

조금 왜

movl $0x41,%ecx 

우선 할 수 없습니다, 그리고?

+0

그것은 동일하지 않습니다. 'ecx'가 어떤 종류의 기본 포인터로 사용되고 있습니다. – Mysticial

+0

@Mysticial write는 다음과 같이 선언됩니다 :'ssize_t write (int fd, const void * buf, size_t count)', ecx is buf – bluekeys

답변

0

sys_write의 경우 % ecx는 인쇄 할 문자가 "be"가 아닌 메모리에 문자가있는 위치를 가리켜 야합니다. "(% esp)"또는 "(% ecx)"중 하나는 현재 시점에서 같은 위치를 가리 키기 때문에 "incb"는 "incl"보다 정확할 수 있습니다. 메모리에 대한 포인터가 아니라 메모리의 "내용"을 증가시키고 있음을 주목하십시오.

최저

, 프랭크

+0

Frank. 그것은 많은 의미가 있습니다. – bluekeys