Sự khác biệt giữa or eax,eax
và test eax,eax
là gì? Tôi đã nhìn thấy trình biên dịch khác nhau sản xuất cả hai cho cùng một so sánh và như xa như tài liệu đi họ làm chính xác điều tương tự, vì vậy tôi tự hỏi tại sao họ không sử dụng tất cả test eax,eax
. Suy nghĩ về nó and eax,eax
sẽ thiết lập các lá cờ trong một thời trang giống hệt nhau hoặc là một trong hai nhưng tôi đã không nhìn thấy nó trong một trong hai freepascal, delphi, hoặc msVC++.Sự khác biệt giữa "hoặc eax, eax" và "kiểm tra eax, eax"
Tôi đã biên dịch một số khối asm trong delphi và kiểm tra nguồn lắp ráp và tất cả 3 biểu mẫu có độ dài chính xác như nhau trong mã opcodes và cũng đã kiểm tra hiệu suất intel PDF và nó cho biết chúng có cùng độ trễ và thông lượng.
Edit:
Câu hỏi đặt ra là đặc biệt về sự khác biệt giữa các trường hợp cụ thể test eax,eax
, or eax,eax
và and eax,eax
. Tất cả 3 cung cấp kết quả hoàn toàn giống hệt nhau cho thanh ghi, cờ, độ dài opcode, độ trễ, thông lượng. Tuy nhiên, để thử nghiệm nếu 0, nếu không bằng 0, hoặc nếu đã ký, một số trình biên dịch sẽ sử dụng test eax,eax
trong khi một số sử dụng or eax,eax
và tôi đã tự hỏi tại sao chúng không phải là tất cả sử dụng test eax,eax
vì nó làm cho mã rất rõ ràng hơn.
Edit2:
Để tham khảo tôi đang ở nhà và chỉ có và msvc cũ ++ và Delphi ở đây, nhưng thử nghiệm một biến nếu không, MSVC++ không test eax,eax
, trong khi Delphi không or eax,eax
.
Dựa trên tên đăng ký, tôi đã đoán [tag: x86]. Nếu điều đó sai, vui lòng gắn thẻ lại câu hỏi của bạn với kiến trúc bộ xử lý thích hợp. Có nhiều hơn một, và mỗi người có các ngôn ngữ lắp ráp khác nhau. –
Bạn đã đúng với x86, điều xấu của tôi là không đặt nó ở đó. – Marladu
Câu trả lời của tôi về bản sao liên kết có nhiều chi tiết hơn về lý do tại sao 'test' là tốt hơn, bao gồm một số lý do không được đề cập ở bất kỳ đâu. Lý do duy nhất những ngày này thậm chí còn xem xét 'hoặc giống nhau, cùng 'là đối với các CPU P6-gia đình khi viết lại một thanh ghi với chính nó giữ cho nó" sống "trong lõi ngoài trật tự, có thể tránh/giảm các quầy đọc khi các lệnh sau đọc cùng một thanh ghi. Tuy nhiên, sự kết hợp vĩ mô của kiểm tra/jcc thường lớn hơn điều đó, trừ khi thử nghiệm hiển thị một lợi ích điểm phát sóng cụ thể. Nhưng có lẽ đó, và không chỉ đơn giản là quán tính, là lý do tại sao Delphi sử dụng 'hoặc'. –