x86 ASM Linux - Использование раздела .bss - PullRequest
11 голосов
/ 16 ноября 2011

Я надеюсь, что эти вопросы довольно просты: (NASM Compiler, Linux, x86 Intel Syntax)

ЧАСТЬ 1:

Я пытаюсь выяснить, как использовать раздел .bssПрограмма сборки, чтобы найти способ хранения значений, таких как значение из операции (+ - * /), в объявленной переменной.Например:

section .bss

variable:  resb 50                                       ;Imaginary buffer

section .text

add 10,1                                                 ;Operation
;move the result into variable

Итак, я знаю, что это можно сделать с помощью встроенной функции ядра для чтения пользовательского ввода (но это касается строк, но есть ли способ скопировать это значение в переменная переменная, чтобы ее можно было использовать позже? Это было бы намного проще, чем просто вставлять и извлекать две вещи из стека.

ЧАСТЬ 2:

Есть лиспособ удалить значение переменной в разделе .bss? Другими словами, если я хочу сохранить новое значение в переменной .bss, как я могу сделать это без символов / значений, уже находящихся в переменной, не смешиваясь сновые значения?

Спасибо

1 Ответ

27 голосов
/ 16 ноября 2011
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

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

...