отлично! Большое спасибо!

асть проекта компилятора я должен написать код ассемблера GNU для x86, чтобы сравнить значения с плавающей запятой. Я попытался найти ресурсы о том, как сделать это онлайн, и насколько я понимаю, это работает так:

Если предположить, что значения to, которые я хочу сравнить, являются единственными значениями в стеке с плавающей запятой, тоfcomi Инструкция сравнит значения и установит флаги CPU так, чтобыje, jne, jl, ... инструкции могут быть использованы.

Я спрашиваю, потому что это работает только иногда. Например:

.section    .data
msg:    .ascii "Hallo\n\0"
f1:     .float 10.0
f2:     .float 9.0

.globl main
    .type   main, @function
main:
    flds f1
    flds f2
    fcomi
    jg leb
    pushl $msg
    call printf
    addl $4, %esp
leb:
    pushl $0
    call exit

не будет печатать «Привет», хотя я думаю, что это должно, и если вы переключите f1 и f2, он все равно не будет, что является логическим противоречием.je а такжеjne Однако, кажется, работает нормально.

Что я делаю неправильно?

PS: fcomip выдает только одно значение или оба?

Ответы на вопрос(1)

Ваш ответ на вопрос