Assembly 初始化.bss变量程序集

Assembly 初始化.bss变量程序集,assembly,x86,yasm,Assembly,X86,Yasm,我声明了一个变量: section .bss var resb 1 我想在我的程序中将其初始化为值255 mov [var], 255 ;error on this line 编译时,我遇到以下错误: program.asm:123: error: invalid size for operand 1 我在这里做错了什么?它是这样工作的,您必须使用寄存器将数据分配到符号[myVar]所寻址的位置: mov eax,255 mov [myVar],eax PRINT_DE

我声明了一个变量:

section .bss
var    resb    1
我想在我的程序中将其初始化为值
255

mov    [var], 255 ;error on this line
编译时,我遇到以下错误:

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

我在这里做错了什么?

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

mov eax,255
mov [myVar],eax

PRINT_DEC 2,myVar

怎么样
mov byte[var],255
?没有运气@MichaelWorks在
nasm
(你已经用它标记了你的问题)。您使用的是哪一个确切的汇编程序,以及您传递给它的选项?我使用的是yasm(我认为它是nasm的一个分支,尽管可能是错误的)。命令行参数是yasm-f elf-g dwarf2-m amd64 ascii.asm@MichaelMichael的版本对我来说可以很好地使用yasm v1.1.0.2352。但是请注意,
.bss
没有,我不得不改用
section.bss
(与您发布的错误无关)。您可以为内存位置分配一个立即值(如255),而无需通过寄存器。操作码信息
C6/0 MOV r/m8,imm8
|
将imm8移动到r/m8。
。请参阅x86。将8位值移动到内存中的8位对象可以使用类似于
mov byte[myVar],255的方法来完成
byte
表示
myVar
指向的内存对象的大小。原始海报希望将8位值移动到
myvar
您的代码错误地尝试将32位移动到声明为1字节的变量。