BÀI HỌC TIẾP THEO Zombie Các thanh ghi cờ - Flag Register(tiếp theo) Các cờ được phân thành 2 loại tương ứng công việc. a. Cờ trạng thái: Phản ánh công việc đang thực thi của bộ xử lý. b. Cờ điều khiển: Quản lý việc thực thi một thao tác nào đó nhằm cho phép hoặc không cho. Biểu diễn thanh ghi cờ trong bộ nhớ: Code 15 14 13 11 10 9 8 7 6 5 4 3 2 1 0 O D I T S Z A P C Tuy nhiên bạn không nhất thiết nhớ vị trí của chúng mà có thể dùng một số lệnh ASM để set cờ. I. Cờ trạng thái: 1. Carry Flag – CF: Được set 1 khi có việc nhớ bit msb. Nói cách khác CF là cờ nhận biết trong phép toán cộng trừ có sự vay mượn không? Ngoài ra các lệnh quay dịch bit cũng tác động CF. 2. Parity Flag – PF: Cho biết số bit 1 trong kết quả byte thấp các phép toán học là số chẳn (1) or lẻ (0). Chẳng hạn kết quả phép toán cho ra FFFEh (byte thấp FE = 11111110, có 7 bit 1 là lẽ >> PF = 0). 3. Auxiliary Flag – AF: Tương tự CF nhưng phản ánh cho bit 3-4. Công dụng khác của CF được dùng trong thao tác với thập phân mã hóa sang nhị phân (BCD). 4. Zero Flag – ZF: Tên cờ đã nói lên ý nghĩa nó phản ánh kết quả toán học có bằng 0 hay not. ZF = 1 khi bằng không và ngược lại. 5. Sign Flag – SF: Cờ dấu cho biết kết quả toán học có âm (1) hay không (0). Như đã biết trên bit msb cũng con số cho biết dấu số do đó SF có thể xem bản sao của msb này. 6. Overflow Flag – OF: Cờ tràn được set 1 khi xảy ra việc tràn số. II. Cờ điều khiển: 1. Direction Flag – DF: Tác động bởi các lệnh chuyển dữ liệu như: MOVS, CMPS…1 = up và ngược lại. Programmer có thể set DF qua các lệnh STD và CLD. 2. Interrupt Flag – IF: Có cho phép xảy ra việc chặn ngắt hệ thống or not. 1 = Enable và ngược lại. 3. Trap Flag – TF: Sử dụng như để set breakpoint để pause hệ thống lại. 1 = on và ngược lại. Ngắt INT 3 dùng set cờ này. Extension: (mở rộng) Nói thêm và việc tràn số Chẳng hạn cộng 2 số 2 byte: Code 1111 1111 1111 1111 + 0000 0000 0000 0001 = 10000 0000 0000 0000 Bit này vượt khỏi khả năng chứa 2 byte >> Tràn OF = 1 Ngoài ra khi tràn còn tính tràn không dấu hay tràn cho có dấu tương ứng việc ta dùng con số là có dấu hay không. 2 việc tràn này hoàn toàn độc lập. Như ở trên nếu là con số có dấu thì kết quả là 0 > đúng. Tràn không dấu: Có thể nhận biết qua việc bit msg có nhớ 1 msb và tương ứng là thiếu 1 bit msg cho phép trừ. Tràn có dấu: Nhận biết khi kết quả nhận được khác dấu 2 số hạng tham gia phép toán. Code 0111 1111 1111 1111 + 0111 1111 1111 1111 = 1111 1111 1111 1110 Ở đây tràn có dấu vì kết quả cho số là -2 khác dấu 2 toán hạng tham gia. Nhưng với không dấu là số 65534 là đúng >> không tràn. Bộ xử lý thực hiện set cờ dựa trên: Nếu phép toán có nhớ vào msb mà msb không nhớ ra hay ngược lại có nhớ ra nhưng không nhớ vào msb thì tràn xuất hiện và set OF = 1. Ví dụ Code 101 0000 + 101 0000 = 1010 0000 |>> Ở đây không nhớ 1 vào cho msb |>> Nhưng ở đây thì lại nhớ ra 1 cho msb >> Tràn . Aladdin Tóm lại thì: Khi thực hiện 1 số thao tác số học thì có 4 trường hợp xảy ra: -Không tràn. -Tràn có dấu. -Tràn không dấu. -Tràn có dấu và không dấu đồng thời. Cờ OF=1 khi tràn có dấu. Cờ CF=1 khi tràn không dấu. À mà hình như Zombie có nhầm chứ b với chữ g hay sao ấy ( ở mấy cái msb và lsb ). Zombie Yeah Thanx bạn đã nhắc fixed Sai chỗ thiếu 1 cho lsb Đúng ra là msb (KHÔNG DÍNH DÁN GÌ ĐẾN BÀI HỌC) Mắt quỷ Kyo http://www.planetpdf.com/codecuts/pdfs/aoa.pdf Vào đó để down, bác Mod di chuyển cái này giùm em nha, em về cái đã BÀI HỌC TIẾP THEO Zombie Một số lệnh toán học . Chẳng hạn cộng 2 số 2 byte: Code 11 11 111 1 11 11 111 1 + 00 00 000 0 00 00 00 01 = 10 000 00 00 000 0 00 00 Bit này vượt khỏi khả năng chứa 2 byte >> Tràn OF = 1 Ngoài ra khi tràn còn tính. quả nhận được khác dấu 2 số hạng tham gia phép toán. Code 01 1 1 11 11 111 1 11 11 + 01 1 1 11 11 111 1 11 11 = 11 11 111 1 11 11 111 0 Ở đây tràn có dấu vì kết quả cho số là -2 khác dấu 2 toán. tràn xuất hiện và set OF = 1. Ví dụ Code 10 1 00 00 + 10 1 00 00 = 10 10 000 0 |>> Ở đây không nhớ 1 vào cho msb |>> Nhưng ở đây thì lại nhớ ra 1 cho msb >> Tràn .