2012-12-22 15 views
5

Tôi đang từ từ cố gắng để có được vào osdev chỉ để chơi xung quanh.Tại sao "hoặc ah, ah"?

This tutorial có một mảnh lắp ráp mà chờ đợi cho một ổ đĩa để trở thành sẵn sàng:

reset_drive: 
    mov ah, 0 
    int 13h 
    or ah, ah 
    jnz reset_drive 

tôi nhận được rằng sau khi ngắt, ah sẽ zero nếu thiết bị đã sẵn sàng. Nhưng or ah,ah làm gì? Dường như một chút dư thừa ... nó dường như không làm gì cả. (ít nhất là bởi logic của tôi) Nó làm gì?

+1

Đó là [một sự thay thế không hiệu quả đối với 'kiểm tra ah, ah'] (https://stackoverflow.com/a/33724806/224132), điều này đặc biệt xấu đối với đăng ký cao 8 vì viết chúng tạo ra việc sáp nhập một phần đăng ký các vấn đề trên CPU Intel, thậm chí Skylake. –

Trả lời

12

Cài đặt/hủy cờ ZERO tùy thuộc vào việc ah bằng không.

Tùy thuộc vào trạng thái của cờ, jnz reset_drive sẽ nhảy: Chỉ khi ahkhông không.

Nói cách khác, thiết bị sẽ đợi thiết bị sẵn sàng vì thiết bị dừng lặp lại sau ah trở thành 0.

+0

oh wow. Tôi không biết về 'ZF'. Cảm ơn bạn đã trả lời nhanh chóng! –

+2

@Matt Chào mừng, về cơ bản tất cả các phép tính số học được đặt/bỏ đặt 'ZF' và các cờ khác, điều này không dành riêng cho' hoặc'. – phant0m

+0

Tôi có kinh nghiệm với bộ vi xử lý dcpu-16, nhưng không quá nóng trên x86. dcpu dễ hiểu hơn nhiều –

Các vấn đề liên quan