2012-01-24 20 views

Trả lời

4

Có một so sánh hữu ích giữa khí và NASM đây: http://www.ibm.com/developerworks/linux/library/l-gas-nasm/index.html

Xem đặc biệt phần này, mà tôi nghĩ rằng địa chỉ câu hỏi của bạn:


Liệt kê 2 cũng giới thiệu các khái niệm về một địa điểm truy cập (dòng 6). NASM cung cấp một biến đặc biệt (các biến $ và $$) để thao tác với bộ đếm vị trí. Trong GAS, không có phương pháp để thao tác bộ đếm vị trí và bạn phải sử dụng nhãn để tính toán vị trí lưu trữ tiếp theo (dữ liệu, hướng dẫn, v.v.). Ví dụ, để tính toán chiều dài của một chuỗi, bạn sẽ sử dụng thành ngữ sau đây trong NASM:

prompt_str db 'Enter your name: ' 
STR_SIZE equ $ - prompt_str  ; $ is the location counter 

Các $ cho giá trị hiện tại của địa điểm truy cập, và trừ đi giá trị của nhãn (tất cả tên biến là các nhãn) từ bộ đếm vị trí này cho biết số byte hiện diện giữa việc khai báo nhãn và vị trí hiện tại. Chỉ thị equ được sử dụng để đặt giá trị của biến STR_SIZE thành biểu thức theo sau nó. Một thành ngữ tương tự trong GAS trông như thế này:

prompt_str: 
    .ascii "Enter Your Name: " 

pstr_end: 
    .set STR_SIZE, pstr_end - prompt_str 

Nhãn cuối (pstr_end) cung cấp cho các địa chỉ địa điểm tiếp theo, và trừ địa chỉ nhãn bắt đầu cung cấp cho các kích thước. Cũng lưu ý việc sử dụng .set để khởi tạo giá trị của biến STR_SIZE thành biểu thức sau dấu phẩy. Một .equ tương ứng cũng có thể được sử dụng. Không có thay thế cho chỉ thị của GAS trong NASM.


18

Trích từ info as (GNU binutils 2.21.90):

5.4 The Special Dot Symbol 
========================== 

The special symbol `.' refers to the current address that `as' is 
assembling into. Thus, the expression `melvin: .long .' defines 
`melvin' to contain its own address. Assigning a value to `.' is 
treated the same as a `.org' directive. Thus, the expression `.=.+4' 
is the same as saying `.space 4'. 
+0

cảm ơn, tôi sẽ thử nó – orustam

Các vấn đề liên quan