相关疑难解决方法(0)

x86汇编程序:浮点比较

作为编译器项目的一部分,我必须为x86编写GNU汇编代码来比较浮点值.我试图找到有关如何在线进行此操作的资源,据我所知,它的工作原理如下:

假设我要比较的值是浮点堆栈上的唯一值,那么fcomi指令将比较这些值并设置CPU标志,以便je可以使用...指令.

我问,因为这只会有效.例如:

.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
Run Code Online (Sandbox Code Playgroud)

即使我认为应该打印"Hallo"也不会打印,如果你切换f1和f2,它仍然不会是一个逻辑上的矛盾.jne并且jl但是似乎做工精细.

我究竟做错了什么?

PS:fcomip只弹出一个值还是同时弹出?

floating-point x86 assembly compare gnu-assembler

15
推荐指数
1
解决办法
1万
查看次数

在C练习中使用char作为bool?

使用是否有任何缺点

typedef char bool;
enum boolean { false, true };
Run Code Online (Sandbox Code Playgroud)

在C中提供语义布尔类型?

c boolean

11
推荐指数
3
解决办法
4275
查看次数

标签 统计

assembly ×1

boolean ×1

c ×1

compare ×1

floating-point ×1

gnu-assembler ×1

x86 ×1