Mã:Sự khác nhau giữa% define và equ trong NASM là gì?
%define x 0x03
x equ 0x03
Sự khác nhau giữa chúng là gì?
Mã:Sự khác nhau giữa% define và equ trong NASM là gì?
%define x 0x03
x equ 0x03
Sự khác nhau giữa chúng là gì?
%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
.