Arrays &引用;没有此类指令错误“;组装数组声明时:

Arrays &引用;没有此类指令错误“;组装数组声明时:,arrays,assembly,x86,redhat,Arrays,Assembly,X86,Redhat,我有以下x86汇编代码: 1 2 .text 3 4 .data 5 6 # define an array of 3 dwords 7 array_word DW 1, 2, 3 8 9 10 .globl main 11 12main: 13 # nothing interesting .. 14 但是当我编译这个时,我不断得到以下错误: $ gcc my_asm.s my_asm.s: Assemb

我有以下x86汇编代码:

 1
 2        .text
 3
 4        .data
 5
 6        # define an array of 3 dwords
 7        array_word DW 1, 2, 3
 8
 9
10        .globl main
11
12main:
13 # nothing interesting ..
14
但是当我编译这个时,我不断得到以下错误:

$ gcc my_asm.s 
my_asm.s: Assembler messages:
my_asm.s:7: Error: no such instruction: `array_word DW 1,2,3'
这是我使用的gcc:

$ gcc --version
gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-16)
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
您的语法错误-(由
gcc
为程序集文件调用)使用了与其他汇编程序不同的语法,如
NASM

使用

另见

请注意,
.word
的结果是特定于目标CPU的-另一种选择是:

7.60.hword表达式

这需要零个或多个表达式,并为 每个

本指令是
.short
的同义词;根据目标体系结构的不同,它也可能是
.word
的同义词


顺便说一下:您在评论中说
#定义一个由3个DWORD组成的数组
,但请注意
DW
是定义一个16位单词的
define Word
。在
NASM
中,您将使用
DD
作为32位字。

如果我想要无符号的32位字,它是否就是
.dword
?(这似乎不起作用)您可以使用
.long
——但这又取决于您的体系结构(这可能不相关,因为您通常是为某些特定的CPU进行组装)——至少,我的
gcc
静态常量unsigned int-someValue=0x12345678创建
.long 305419896
谢谢!这解决了我的问题。尽管如此,我还是应该更聪明一些,只看一下由
unsgined int[10]x生成的程序集!最好从示例中学习。是的,完全正确-如果不确定,只需将几行
C
代码转储到
gcc-S
中,如果您习惯了该语法,或者正在遵循使用该语法的教程,只需使用YASM或NASM即可。将gcc与
-masm=intel
.intel\u syntax
指令一起使用时,只切换指令语法,而不切换汇编程序指令,如
.globl main
全局main
array_word: .word 1, 2, 3