gpt4 book ai didi

X86 intel 语法 - mov 大小不明确,表达式后为垃圾 h?

转载 作者:行者123 更新时间:2023-12-01 06:22:26 29 4
gpt4 key购买 nike

我正在使用 AT&T 语法,但我想尝试一下英特尔。我有这个代码:

.text
.global _start

_start:
mov ebx, 0
mov eax, 1
int 80h

哪个应该返回0,对吗?在我转换它之前,它是用 AT&T 做的。

我正在组装使用:
 as out.s -msyntax=intel --32 -o out.o

但我得到:
out.s:5: Error: ambiguous operand size for `mov'
out.s:6: Error: ambiguous operand size for `mov'
out.s:7: Error: junk `h' after expression

我哪里出错了?

最佳答案

非古老版本的 GNU 汇编程序提供对 Intel 语法的支持,但存在一些问题。 -msyntax=intel如果您正在寻找更接近 NASM/MASM 的英特尔语法的东西,这还不够。 -msyntax=intel将切换操作数的顺序,因此目标是第一个操作数,源操作数在后。但是,您仍然需要在所有寄存器名称前加上 % 前缀。百分。所以你可能会发现这会奏效:

    mov %ebx, 0
mov %eax, 1

这可能会修复 MOV 指令上的错误。这可能不是您想要的。在没有 % 的情况下使用 Intel 语法您可以将其添加到每个程序集文件的顶部:
.intel_syntax noprefix

通过在每个汇编文件的顶部指定此项,您不再需要使用选项 -msyntax=intel 进行汇编。 .
junk 'h' after expression错误是因为 GNU 的汇编器(即使在 Intel 语法模式下)不支持将基数指定为后缀的常量。在你的情况下 80h不被认可。 GNU 汇编器要求 base 由前缀指定,如 0x为十六进制。因此,要消除此错误,请使用:
    int 0x80

修复这些问题应该允许此代码组装。

关于X86 intel 语法 - mov 大小不明确,表达式后为垃圾 h?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46746145/

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