Tải bản đầy đủ (.pdf) (6 trang)

Cracker Handbook 1.0 part 9 pptx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (149.71 KB, 6 trang )

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

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

×