Tôi mới sử dụng ngôn ngữ lắp ráp x86, tôi có một số nguyên đã được lưu trong sổ đăng ký eax
và tôi muốn kiểm tra xem số đó là số âm hay dương. Để làm điều đó, tôi đã sử dụng lệnh bt
để kiểm tra bit đầu tiên.Làm thế nào để kiểm tra nếu một số nguyên đã ký là neg hoặc pos?
Dưới đây là những gì tôi đã làm:
bt eax,0
jnc isNegative
bt
mang bit đầu tiên để thực hiện lá cờ, và tôi sử dụng jnc
để kiểm tra xem carry cờ là 0 hoặc 1. Nếu đó là 1, nó phải là một tiêu cực số, và làm hướng dẫn tiêu cực ... tuy nhiên, đầu ra là không thể đoán trước, đôi khi tôi có một tích cực và nó nhận ra nó như là một số âm. Tôi có làm điều gì sai?
EDIT: Tôi vừa nhận ra rằng nó có thể có liên quan đến endianess. Nó thực sự kiểm tra bit cuối thay vì bit đầu tiên. Hãy để tôi thử sử dụng bt
, 7
Tuyệt vời, khắc phục sự cố nd đơn giản! Mặc dù, nó phải là cmp eax, 0 – Yonk
Phụ thuộc vào bộ lắp ráp bạn đang sử dụng, nhưng đối với Intel, có. Tôi đoán đó là nơi downvote đến từ. – nmichaels
cmp dài hơn kiểm tra để kiểm tra thường được ưu tiên http://stackoverflow.com/a/147183/995714 –