Подтвердить что ты не робот

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, как я мог бы сделать это без символов/значений, уже находящихся в переменной, которые не будут усугубляться новыми значениями?

Спасибо

4b9b3361

Ответ 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

... сохраняет новое значение, перезаписывая предыдущий.