X86 ASM Linux - Использование секции .bss
Я надеюсь, что эти вопросы довольно просты: (NASM Compiler, Linux, x86 Intel Syntax)
ЧАСТЬ 1:
Я пытаюсь выяснить, как использовать раздел .bss в программе Assembly, чтобы найти способ хранения значений, например значения из операции (+ - */), для объявленной переменной. Например:
section .bss
variable: resb 50 ;Imaginary buffer
section .text
add 10,1 ;Operation
;move the result into variable
Итак, я знаю, что это возможно сделать с ядром intterupt для чтения пользовательского ввода (но это связано с строками, но есть ли способ скопировать это значение в переменную, чтобы его можно было использовать позже? быть намного проще, чем просто нажать и поместить две вещи в стек и вне его.
ЧАСТЬ 2:
Есть ли способ удалить значение переменной в разделе .bss? Другими словами, если я хочу сохранить новое значение в переменной .bss, как я мог бы сделать это без символов/значений, уже находящихся в переменной, которые не будут усугубляться новыми значениями?
Спасибо
Ответы
Ответ 1
section .bss
variable: resb 4
... символ variable
теперь относится к адресу 4 байта памяти в разделе .bss
(то есть достаточно для хранения 32-битного значения).
section .text
...
mov eax, 123
mov [variable], eax
... устанавливает регистр eax
в 123
, а затем сохраняет значение eax
в адресе, адресуемом символом variable
.
mov eax, [variable]
... считывает значение, хранящееся в настоящее время в адресе variable
, в регистр eax
.
mov eax, 456
mov [variable], eax
... сохраняет новое значение, перезаписывая предыдущий.