Dimulai dengan prosesor 80286, Intel telah mempertahankan kompatibilitas penuh dari bawah ke atas dalam set instruksi. Artinya, jika beberapa instruksi prosesor memberikan hasil ini dan itu pada 8086, maka hasilnya akan sama persis pada prosesor selanjutnya (sekarang kami tidak akan mempertimbangkan kesalahan seperti pembagian yang salah di Pentium I).
Tapi apakah itu? Pertanyaan yang luar biasa! Lagi pula, jika kompatibilitas tidak dipertahankan, maka program lama tidak dapat dijalankan, dan Anda masih dapat bernostalgia di komputer mana pun dengan menjalankan Norton Commander atau Tetris. Namun, tidak semuanya sesederhana itu ... Dimulai dengan 8080, prosesor Intel memiliki register bendera, yang statusnya ditentukan oleh hasil perintah penghitungan data terakhir. Semua bendera telah dijelaskan di dalamnya untuk waktu yang lama dan perilakunya diperbaiki dengan ketat. Kecuali dua pengecualian.
AF โ . . 8- 8080 . 16- x86 โ ? Intel โ AF . 8080 . 16- AF !
, - ! AF PF !
:
#include <iostream>
#include <iomanip>
int main()
{
using namespace std;
const int min_i = -20, max_i = 50,min_j=-10, max_j = 50;
short int i, j, k, pf;
cout << "Name;i;j;Result;AF;PF;Calculated parity\n";
for (i = min_i; i < max_i; i++) {
for (j = min_j; j < max_j; j++) {
__asm {
mov ax, i
mov dx, j
imul dx
pushf
pop ax
mov k, ax
}
pf = i * j; pf = ((pf >> 7) ^ (pf >> 6) ^ (pf >> 5) ^ (pf >> 4) ^ (pf >> 3) ^ (pf >> 2) ^ (pf >> 1) ^ pf ^ 1) & 1;
cout << "Mul ;" << setw(4) << i << "; " << setw(4) << j << "; " << setw(4) << i * j << "; " << ((k & 0x10) ? "1" : "0") << "; " << ((k & 0x04) ? "1" : "0") << "; " << pf <<"\n";
}
}
for (i = min_i; i < max_i; i++) {
for (j = min_j; j < max_j; j++) {
if (j == 0) continue;
__asm {
mov ax, i
mov cx, j
cwd
idiv cx
pushf
pop ax
mov k, ax
}
pf = i / j; pf = ((pf >> 7) ^ (pf >> 6) ^ (pf >> 5) ^ (pf >> 4) ^ (pf >> 3) ^ (pf >> 2) ^ (pf >> 1) ^ pf ^ 1) & 1;
std::cout << "Div ;" << setw(4) << i << "; " << setw(4) << j << "; " << setw(4) << i / j << "; " << ((k & 0x10) ? "1" : "0") << "; " << ((k & 0x04) ? "1" : "0") << "; " << pf << "\n";
}
}
}
AF PF . ( ) .
16 . :
|
|
|
|
|
Wolfdale |
Sandy Bridge |
Coffee Lake |
AMD |
||||
|
|
|
|
|
Pentium Dual-Core E6600 |
Core i5-2300 |
Xeon E-2278G |
AMD Ryzen 7 2700 |
||||
i |
j |
Result |
Cal parity |
AF |
PF |
AF |
PF |
AF |
PF |
AF |
PF |
-20 |
-10 |
200 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
-20 |
-9 |
180 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
-20 |
-8 |
160 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
-20 |
-7 |
140 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
-20 |
-6 |
120 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
-20 |
-5 |
100 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
-20 |
-4 |
80 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
-20 |
-3 |
60 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
-20 |
-2 |
40 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
-20 |
-1 |
20 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
-20 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
-20 |
1 |
-20 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
-20 |
2 |
-40 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
-20 |
3 |
-60 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
-20 |
4 |
-80 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
-20 |
5 |
-100 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
-20 |
6 |
-120 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
-20 |
7 |
-140 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
-20 |
8 |
-160 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
-20 |
9 |
-180 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
-20 |
10 |
-200 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
-20 |
11 |
-220 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
-20 |
12 |
-240 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
-20 |
13 |
-260 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
-20 |
14 |
-280 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
-20 |
15 |
-300 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
-20 |
16 |
-320 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
-20 |
17 |
-340 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
-20 |
18 |
-360 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
-20 |
19 |
-380 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
-20 |
20 |
-400 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
-20 |
21 |
-420 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
-20 |
22 |
-440 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
-20 |
23 |
-460 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
-20 |
24 |
-480 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
-20 |
25 |
-500 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
-20 |
26 |
-520 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
-20 |
27 |
-540 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
-20 |
28 |
-560 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
-20 |
29 |
-580 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
-20 |
30 |
-600 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
-20 |
31 |
-620 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
-20 |
32 |
-640 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
-20 |
33 |
-660 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
-20 |
34 |
-680 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
-20 |
35 |
-700 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
-20 |
36 |
-720 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
-20 |
37 |
-740 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
-20 |
38 |
-760 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
-20 |
39 |
-780 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
-20 |
40 |
-800 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
-20 |
41 |
-820 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
-20 |
42 |
-840 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
-20 |
43 |
-860 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
-20 |
44 |
-880 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
-20 |
45 |
-900 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
-20 |
46 |
-920 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
-20 |
47 |
-940 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
-20 |
48 |
-960 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
-20 |
49 |
-980 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
|
|
|
|
|
|
Yonah |
Conroe |
Coffee Lake |
AMD |
||||
|
|
|
|
|
Core Duo T2450 |
Core 2 Duo E6750 |
Xeon_E-2278G |
AMD Ryzen 7 2700 |
||||
i |
j |
Result |
Calc parity |
AF |
PF |
AF |
PF |
AF |
PF |
AF |
PF |
-20 |
-10 |
2 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
-20 |
-9 |
2 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
-20 |
-8 |
2 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
-20 |
-7 |
2 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
-20 |
-6 |
3 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
-20 |
-5 |
4 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
-20 |
-4 |
5 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
-20 |
-3 |
6 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
-20 |
-2 |
10 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
-20 |
-1 |
20 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
-20 |
1 |
-20 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
-20 |
2 |
-10 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
-20 |
3 |
-6 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
-20 |
4 |
-5 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
-20 |
5 |
-4 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
-20 |
6 |
-3 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
-20 |
7 |
-2 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
-20 |
8 |
-2 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
-20 |
9 |
-2 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
-20 |
10 |
-2 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
-20 |
11 |
-1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
-20 |
12 |
-1 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
-20 |
13 |
-1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
-20 |
14 |
-1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
-20 |
15 |
-1 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
-20 |
16 |
-1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
-20 |
17 |
-1 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
-20 |
18 |
-1 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
-20 |
19 |
-1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
-20 |
20 |
-1 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
-20 |
21 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
-20 |
22 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
-20 |
23 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
-20 |
24 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
-20 |
25 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
-20 |
26 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
-20 |
27 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
-20 |
28 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
-20 |
29 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
-20 |
30 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
-20 |
31 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
-20 |
32 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
-20 |
33 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
-20 |
34 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
-20 |
35 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
-20 |
36 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
-20 |
37 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
-20 |
38 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
-20 |
39 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
-20 |
40 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
-20 |
41 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
-20 |
42 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
-20 |
43 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
-20 |
44 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
-20 |
45 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
-20 |
46 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
-20 |
47 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
-20 |
48 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
-20 |
49 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
|
, :
Intel ( Wolfdale โ ยซยป , Sandy Bridge โ ยซยป (Nehalem )). ยซยป AF 0, PF โ ( ). ยซยป .
AMD , ยซยป Intel.
Pada operasi pembagian, semua prosesor Intel menyetel bit paritas sama (tetapi tidak cocok dengan paritas bit dari byte terakhir dari hasil pembagian dan modulo).
Bit AF setelah pembagian diatur ke 0 di prosesor Intel, kecuali untuk keluarga Yonah dan sebelumnya.
AMD setelah pembagian menetapkan AF = 1 dan PF = 0.
Tabel tes lengkap dapat diunduh
Jika ada yang memiliki akses ke prosesor yang belum diuji, silakan ambil bagian.
UPD Sedikit demi sedikit saya menambahkan tes prosesor yang dikirimkan. Detail ada di komentar.