thể trùng lặp:
x86 Assembly - ‘testl’ eax against eax?Điểm của bài kiểm tra% eax% eax
Tôi rất rất mới để lập trình ngôn ngữ lắp ráp, và tôi hiện đang cố gắng để đọc lắp ráp ngôn ngữ được tạo từ nhị phân. Tôi đã chạy qua số
test %eax,%eax
hoặc test %rdi, %rdi
, v.v ... Tôi rất bối rối về điều này. Giá trị trong %eax, %eax
có giống nhau không? Nó là gì? Tôi đọc ở đâu đó rằng nó đang thực hiện các hoạt động AND
..... nhưng vì chúng có cùng giá trị, nó sẽ không trả về %eax
?
Sau đây chỉ là một trường hợp mà tôi thấy việc sử dụng này:
400e6e: 85 c0 test %eax,%eax
400e70: 74 05 je 400e77 <phase_1+0x23>
Tôi nghĩ je
nhảy nếu hai giá trị được so sánh được bằng ...... tốt, vì %eax
là tốt, chính nó, trong tình huống nào chúng ta KHÔNG nhảy?
Tôi là người mới bắt đầu lập trình nói chung, vì vậy tôi rất cảm kích nếu có ai đó có thể giải thích điều này với tôi. Cảm ơn!
Vì một số câu trả lời có vẻ hơi không rõ ràng về nó, hãy để tôi chỉ ra rằng 'TEST' cập nhật các cờ khác ngoài' ZF'. Xem tham chiếu tập lệnh. – Jester
@Jester cố định (trong câu trả lời của tôi), xin lỗi. –
Một bản sao có thể khác: [Lệnh 'test' làm gì?] (Http://stackoverflow.com/q/6002079) – jww