2012-01-01 16 views

Trả lời

12

%define là một cách mạnh mẽ hơn để làm macro, tương tự như bộ xử lý trước C. Trong trường hợp đơn giản của bạn, không có nhiều khác biệt, sử dụng x trong mã nguồn sẽ dẫn đến việc thay thế 3 không đổi. Có một sự khác biệt tinh tế trong câu lệnh equ được đánh giá một lần, khi chúng được đọc lần đầu và các macro %define được đánh giá bất cứ khi nào chúng gặp phải trong nguồn.

Bạn có thể thấy sự khác biệt có giữa hai đoạn tuyên bố:

addr equ  $ 
     %define addr $ 

Trong trường hợp đó, addr, khi gặp trong các mã, sẽ có giá trị khác nhau. Trong trường hợp đầu tiên, $ sẽ là vị trí của vị trí lắp ráp tại địa điểm có số equ. Nói cách khác, nơi nó được xác định là .

Trong trường hợp thứ hai, nó đánh giá vị trí lắp ráp tại địa điểm nơi addr được sử dụng .

đâu %define tỏa sáng là với một cái gì đó như:

%define thricexplusy(x,y) (3 * x + y) 

hay:

%define ctrl(c) (c & 0x1F) 
: : 
mov  al, ctrl('z') 

(hoặc thậm chí điều đáng kể phức tạp hơn) cho phép bạn truyền tham số cho macro của bạn, một cái gì đó không thể thực hiện với một đơn giản equ.

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