gpt4 book ai didi

assembly - GAS 汇编器操作数类型不匹配 `cmovz'

转载 作者:行者123 更新时间:2023-12-02 19:11:09 26 4
gpt4 key购买 nike

我正在尝试编写一个简单的汇编程序。由于某种原因,条件移动似乎给了我这个错误。如果我用正常的 mov 指令替换它们,它就可以工作。下面的代码有什么问题?

    .section .data

supported:
.asciz "AVX is supported"
notsupported:
.asciz "AVX is not supported"


.section .text
.global main
main:
movq $1, %rax
cpuid
andq $0x10000000, %rcx
cmovnz $supported, %rdi
cmovz $notsupported, %rdi
callq puts

movq $0, %rax
ret
cpuid.S:15: Error: operand type mismatch for `cmovnz'
cpuid.S:16: Error: operand type mismatch for `cmovz'

最佳答案

如果您查看 Intel 手册中对 CMOVcc 的描述,您会发现源操作数需要是 r/m64(即 64 位寄存器或内存位置)。 $supported$notsupported 是立即数,因此不符合 r/m64 的资格。

你可以这样做:

movabs $notsupported,%rdi
movabs $supported,%rbx
testq $0x10000000, %rcx # checks the desired bit without clobbering %rcx
cmovnz %rbx,%rdi

关于assembly - GAS 汇编器操作数类型不匹配 `cmovz',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31585739/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com