отлично! Большое спасибо!
асть проекта компилятора я должен написать код ассемблера 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 выдает только одно значение или оба?