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字节的变量。