CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ CnUnix ] in KIDS
글 쓴 이(By): zeo (ZeoDtr)
날 짜 (Date): 1994년02월08일(화) 14시09분08초 KST
제 목(Title): Re:윤익수 씨



HellCat님, 여기 assembly code 만들어진 거 올립니다.
참고로, 이건 MSC 7.0에서 -Fa option을 주고 (unix의 -S와 같은 거) 만든
assembly source 화일에서 잘라온 겁니다. optimize option은 전혀 주지
않았습니다.

소스:
--------------------
void
main()

{
    int i, x, y, z;

    x = y = z = 0;
    i = (++x + ++y) + ++z;
    i = ++x + ++y + ++z;
}

assembly output
--------------------
; Line 8
    add    WORD PTR -10[bp],OFFSET 1
    mov    ax,WORD PTR -10[bp]
    add    WORD PTR -8[bp],OFFSET 1
    mov    cx,WORD PTR -8[bp]
    add    WORD PTR -6[bp],OFFSET 1
    mov    dx,WORD PTR -6[bp]
    add    dx,cx
    add    dx,ax
    mov    WORD PTR -4[bp],dx
; Line 9
    add    WORD PTR -10[bp],OFFSET 1
    mov    ax,WORD PTR -10[bp]
    add    WORD PTR -8[bp],OFFSET 1
    mov    cx,WORD PTR -8[bp]
    add    WORD PTR -6[bp],OFFSET 1
    mov    dx,WORD PTR -6[bp]
    add    dx,cx
    add    dx,ax
    mov    WORD PTR -4[bp],dx

괄호를 하나 안하나 똑같죠?
먼저 increment를 몽땅 한 다음 모아서 더합니다.

참고로, MSC 7.0에서 -Ot로 optimize하면 main() 함수가 텅 비어버립니다.
즉, 
main()
{
    int i, x, y, z;
}
와 같이 되어 버린다는 거죠. 똑똑하다 MSC 7.0...
TCW는 시간이 없어서 못해 봤습니다. 하지만 똑같을 것 같군요.

애고, 일을 해야 되는디...

에이, 내친 김에 mips(CPU는 물론? R3000 계열)에서도 뽑아 봤습니다.

 # 8  i = (++x + ++y) + ++z;
    lw    $14, 8($sp)
    addu  $15, $14, 1
    sw    $15, 8($sp)
    lw    $24, 4($sp)
    addu  $25, $24, 1
    sw    $25, 4($sp)
    lw    $8, 0($sp)
    addu  $9, $8, 1
    sw    $9, 0($sp)
    addu  $10, $15, $25
    addu  $11, $10, $9
    sw    $11, 12($sp)
    .loc  2 9
 # 9  i = ++x + ++y + ++z;
    lw    $12, 8($sp)
    addu  $13, $12, 1
    sw    $13, 8($sp)
    lw    $14, 4($sp)
    addu  $24, $14, 1
    sw    $24, 4($sp)
    lw    $8, 0($sp)
    addu  $15, $8, 1
    sw    $15, 0($sp)
    addu  $25, $13, $24
    addu  $10, $25, $15
    sw    $10, 12($sp)
    .loc  2 10

뭐, R3000 계열의 instruction들을 모르더라도 대충 이해가 가겠지요.
마찬가지로 increment를 몽땅 먼저 하고 있습니다.
참고로, optimize를 약간(default로) 하면 변수(register)는 쓰지도 않고
아예 1 + 1 + 1, 2 + 2 + 2를 해 버립니다.

이제 ++... 문제는 서로 더 이상 이야기 하지 않아도 될 것 같네요. 그쵸?
나도 일 해야 돼요... 또 계속 다른 사람의 PC에 가서 프로젝트 방해하면 안되니깐.
(저는 unix 프로젝트를 하고 있기때메 PC가 없어요)

그건 그렇구요, HellCat님께서 저의 unix C에 대한 비난을 읽고 기분이 나쁘셨던
것에 대해 죄송하게 생각합니다. 그에 대한 저의 변론은 제가 시간이 나면 또
하도록 하죠. 제가 올린 글을 다시 읽어 보니 좀 감정에 치우친 부분도 있어서
미안하네요(모든 unix guru(?)들에게도...).
그런데 HellCat님, 이제 HellCat님이 애꿎은 TC를 욕하셨을 때의 저의 기분을
조금은 이해하시겠죠? (문제성 발언? 그렇게 보인다면 죄송.)

기쁜 설날을 맞이하시길...

                                   ZZZZZZ
                                     zZZ  eeee  ooo
                                    zZ    Eeee O   O
                                   ZZZZZZ Eeee  OoO
[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.