Để thêm vào Nils Đáp lại,
Là một bồi dưỡng, chế độ addresing trong IA32 lắp ráp thường có dạng:
IO (Rb, Ri, s), trong đó:
IO = ngay lập tức offset
Rb = cơ sở ký
Ri = Index Đăng ký
s = Scaling Yếu tố {1, 2, 4, 8}
Vì vậy, các địa chỉ hiệu quả được tính như * IO + [Eb] + [Ei] s
Leal trông tương tự với các hướng dẫn khác như movl, nhưng nó hơi đặc biệt. Thay vì đọc từ nguồn đến đích, nó sao chép địa chỉ hiệu quả của nguồn đến đích.
Vì vậy, nó có thể được sử dụng để tạo con trỏ cho các tham chiếu bộ nhớ sau này, và cũng cho các phép tính số học cơ bản, như Nils đã chỉ ra.
Ví dụ:
hãy đăng ký% edx chứa một giá trị của x
Leal 1 (% edx,% edx, 8),% eax
sẽ được tải địa chỉ có hiệu lực 1 + x + 8 * x = 1 + 9x để đăng ký% eax.
Về bản chất, các hoạt động:
Lealnguồn, điểm đến =>điểm đến = địa chỉ củanguồn
Nếu bạn quen với C, nó là tương đương với:
char * b = & a;
nơi địa chỉ của char một được gán cho char trỏ b
hơn ví dụ:
Hãy đăng ký% eax giá trị giữ x, và đăng ký% ecx giá trị giữ y
Leal (% eax,% ecx, 4),% edx sẽ chỉ định giá trị x + 4y để đăng ký% edx
leal 0xB (,% ecx, 5),% edx sẽ gán giá trị 0xB + 5y = 11 + 5y đến% edx
Leal (% eax,% eax, 2),% eax sẽ gán 3x giá trị đăng ký% eax
Hope this helps
Rất tốt được giải thích cho trình biên dịch ..thực sự –
Ngoài ra, như đã đề cập, có thể sử dụng leal để thực hiện các phép toán số học. Nhưng nó không thiết lập các mã điều khiển. Vì vậy, không nên được sử dụng cho nhảy có điều kiện hoặc di chuyển có điều kiện. –
Câu trả lời tuyệt vời! – Eloff