2011-11-16 15 views
10

Tôi hy vọng những câu hỏi này là khá đơn giản: (NASM Compiler, Linux, Intel x86 Cú pháp)x86 ASM Linux - Sử dụng Phần .bss

PHẦN 1:

Tôi cố gắng để tìm ra cách để sử dụng phần .bss của chương trình Assembly để tìm cách lưu trữ các giá trị, giống như một giá trị từ một thao tác (+ - * /), đến một biến được khai báo. Ví dụ:

section .bss 

variable: resb 50          ;Imaginary buffer 

section .text 

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

Vì vậy, tôi biết nó có thể làm điều này với intterupt hạt nhân cho việc đọc đầu vào sử dụng (nhưng có liên quan đến chuỗi, nhưng là có một cách để sao chép giá trị này vào biến biến nên ? nó có thể được sử dụng sau này sẽ dễ dàng hơn nhiều so với việc phải đẩy và bật hai điều trên và ra khỏi stack

PHẦN 2:.

có cách nào để loại bỏ các giá trị của biến trong Nói cách khác, nếu tôi muốn lưu trữ một giá trị mới trong biến .bss, làm thế nào tôi có thể làm điều đó wi Thout các ký tự/giá trị đã có trong biến không nhận được kết hợp với (các) giá trị mới?

Cảm ơn

Trả lời

25
section .bss 

variable: resb 4 

... biểu tượng variable nay đề cập đến địa chỉ của 4 byte dung lượng lưu trữ trong phần .bss (ví dụ đủ để lưu trữ một giá trị 32-bit trong).

section .text 
... 
mov eax, 123 
mov [variable], eax 

... đặt eax đăng ký để 123, và sau đó lưu trữ các giá trị của eax ở vị trí giải quyết bằng các biểu tượng variable.

mov eax, [variable] 

... đọc giá trị hiện lưu trữ trong các vị trí giải quyết bằng variable vào eax đăng ký.

mov eax, 456 
mov [variable], eax 

... lưu trữ một giá trị mới, ghi đè lên giá trị trước đó.

+0

Rất tốt giải thích, như mọi khi! – nmagerko