"没有这样的指令错误"组装数组声明时:

时间:2015-12-18 06:27:04

标签: 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: 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.

1 个答案:

答案 0 :(得分:2)

您的语法错误 - gas(由gcc为汇编文件调用)使用与NASM等其他汇编程序不同的语法。

使用

array_word: .word 1, 2, 3

另见https://sourceware.org/binutils/docs/as/Word.html#Word

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

  

7.60 .hword 表达式

     

这需要零个或多个表达式,并发出 16位数   每个

     

该指令是.short的同义词;根据目标架构,它也可能是.word的同义词。

顺便说一句:您在评论中说# define an array of 3 dwords - 但请注意DWDefine Word,它定义了16位字。在NASM中,您可以将DD用于32位字。