【问题标题】:Initialise .bss variable assembly初始化 .bss 变量程序集
【发布时间】:2014-03-27 12:05:46
【问题描述】:

我已经声明了一个变量:

section .bss
var    resb    1

我想在我的程序中将其初始化为值255

mov    [var], 255 ;error on this line

编译时出现以下错误:

program.asm:123: error: invalid size for operand 1

我在这里做错了什么?

【问题讨论】:

  • mov byte [var],255 怎么样?
  • 运气不好@Michael
  • nasm 中工作正常(您已经用它标记了您的问题)。您正在使用哪个确切的汇编程序,以及您将哪些选项传递给它?
  • 我正在使用 yasm(我认为它是 nasm 的一个分支,虽然可能是错误的)。命令行参数是 yasm -f elf -g dwarf2 -m amd64 ascii.asm @Michael
  • Michael 的版本适用于我的 yasm v1.1.0.2352。但请注意,.bss 没有,我必须改用section .bss(与您发布的错误无关)。

标签: assembly x86 yasm


【解决方案1】:

它是这样工作的,您必须使用寄存器将数据分配给符号 [myVar] 寻址的位置:

mov eax,255
mov [myVar],eax

PRINT_DEC 2,myVar

【讨论】:

  • 您可以在不通过寄存器的情况下将立即值(如 255)分配给内存位置。操作码信息C6 /0 MOV r/m8,imm8 | Move imm8 to r/m8. 。请参阅 x86 instruction set reference。将 8 位值移动到内存中的 8 位对象可以使用 mov byte [myVar],255 之类的方法完成。 byte 表示myVar 指向的内存对象的大小。原始海报想要将 8 位值移动到 myvar 您的代码错误地尝试将 32 位移动到声明为 1 字节的变量。
猜你喜欢
  • 1970-01-01
  • 2013-09-03
  • 1970-01-01
  • 2013-04-15
  • 1970-01-01
  • 2011-05-14
  • 2019-03-24
  • 1970-01-01
  • 2019-01-19
相关资源
最近更新 更多