Arrays &引用;没有此类指令错误“;组装数组声明时:
我有以下x86汇编代码: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
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