2016-04-16 8 views
-1
int i; 

    float x; 

    double d; 

    char c; 
    x=10; 
    i=19; 
// below assm code for this line only. 
     c=x<i; // below ass code show c=10? why it should be 1 

Assembly Code:Assembly Code nicht korrektes Ergebnis zum Vergleich op geben

# 39 
       # b_push_ext_addr (c) 
    subl $8, %esp 
    movl $c, (%esp) 
       # b_push_ext_addr (x) 
    subl $8, %esp 
    movl $x, (%esp) 
       # b_deref (float) 
    movl (%esp), %eax 
    movl (%eax), %edx 
    movl %edx, (%esp) 
       # b_convert (float -> double) 
    flds (%esp) 
    fstpl (%esp) 
       # b_push_ext_addr (i) 
    subl $8, %esp 
    movl $i, (%esp) 
       # b_deref (signed int) 
    movl (%esp), %eax 
    movl (%eax), %edx 
    movl %edx, (%esp) 
       # b_convert (signed int -> double) 
    fildl (%esp) 
    fstpl (%esp) 
       # b_arith_rel_op (< , double) 
    fldl 8(%esp) 
    fldl (%esp) 
    addl $8, %esp 
    fucompp 
    fnstsw %ax 
    testb $69, %ah 
    sete %al 
    movzbl %al, %eax 
    movl %eax, (%esp) 
       # b_convert (double -> signed char) 
    fldl (%esp) 
    subl $8, %esp 
    fnstcw 6(%esp) 
    movzwl 6(%esp), %eax 
    movb $12, %ah 
    movw %ax, 4(%esp) 
    fldcw 4(%esp) 
    fistpl 8(%esp) 
    fldcw 6(%esp) 
    addl $8, %esp 
       # b_assign (signed char) 
    movzbl (%esp), %edx 
    addl $8, %esp 
    movl (%esp), %eax 
    movb %dl, (%eax) 
    movb %dl, (%esp) 
       # b_pop() 
    addl $8, %esp 

Antwort

1
movl %eax, (%esp) # eax is an integer here! 
      # b_convert (double -> signed char) 
fldl (%esp)  # you load integer as double 

Habe ich dir nicht gesagt, den Debugger zu benutzen? Wir werden nicht alles für Sie debuggen!

+0

Sie sollten anfangen, Kurs-Credits zu bekommen ;-) –

+0

@Jester Danke. – user836026

+0

Ich versuche herauszufinden, wie Sie Ihre ESP-Kräfte verwendet haben, um festzustellen, was die eigentliche Frage hier war ... @Jester –

Verwandte Themen